From 89668bb98a93268d11e6b0b7496972e5ddb6d993 Mon Sep 17 00:00:00 2001 From: Jonas Rembser Date: Wed, 5 Feb 2025 11:42:25 +0100 Subject: [PATCH] [davix] Restrict lock in `TDavixFile::ReadBuffer` Restrict lock in `TDavixFile::ReadBuffer` to only be avoid the `d_ptr->davixPosix->pread()` call by moving the lock into the private helper function. That also means that the lock is now used in all the `ReadBuffer` overloads. --- net/davix/src/TDavixFile.cxx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/net/davix/src/TDavixFile.cxx b/net/davix/src/TDavixFile.cxx index e23ebbefd6cb3..9dc4f5c3dddd4 100644 --- a/net/davix/src/TDavixFile.cxx +++ b/net/davix/src/TDavixFile.cxx @@ -737,7 +737,6 @@ void TDavixFile::Seek(Long64_t offset, ERelativeTo pos) Bool_t TDavixFile::ReadBuffer(char *buf, Int_t len) { - TLockGuard guard(&davixLock); Davix_fd *fd; if ((fd = d_ptr->getDavixFileInstance()) == NULL) return kTRUE; @@ -912,7 +911,12 @@ Long64_t TDavixFile::DavixReadBuffer(Davix_fd *fd, char *buf, Long64_t pos, Int_ DavixError *davixErr = NULL; Double_t start_time = eventStart(); - Long64_t ret = d_ptr->davixPosix->pread(fd, buf, len, pos, &davixErr); + Long64_t ret; + { + TLockGuard guard(&davixLock); + ret = d_ptr->davixPosix->pread(fd, buf, len, pos, &davixErr); + } + if (ret < 0) { Error("DavixReadBuffer", "can not read data with davix: %s (%d)", davixErr->getErrMsg().c_str(), davixErr->getStatus());