From b2537052efa349d03a0777132d7103b1c13c0105 Mon Sep 17 00:00:00 2001 From: Takeshi Nakatani Date: Sun, 9 Jul 2023 05:15:27 +0000 Subject: [PATCH] Fixed data race in threads found thread sanitizer --- src/curl.cpp | 4 ++-- src/fdcache_entity.cpp | 4 ++-- src/s3fs.cpp | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/curl.cpp b/src/curl.cpp index a5117b3..5332b84 100644 --- a/src/curl.cpp +++ b/src/curl.cpp @@ -2078,13 +2078,13 @@ bool S3fsCurl::DestroyCurlHandle(bool restore_pool, bool clear_internal_data, Au type = REQTYPE_UNSET; } + AutoLock lock(&S3fsCurl::curl_handles_lock, locktype); + if(clear_internal_data){ ClearInternalData(); } if(hCurl){ - AutoLock lock(&S3fsCurl::curl_handles_lock, locktype); - S3fsCurl::curl_times.erase(hCurl); S3fsCurl::curl_progress.erase(hCurl); sCurlPool->ReturnHandler(hCurl, restore_pool); diff --git a/src/fdcache_entity.cpp b/src/fdcache_entity.cpp index 0ee60a8..d64bf4d 100644 --- a/src/fdcache_entity.cpp +++ b/src/fdcache_entity.cpp @@ -2533,7 +2533,7 @@ bool FdEntity::PunchHole(off_t start, size_t size) // void FdEntity::MarkDirtyNewFile() { - AutoLock auto_lock(&fdent_data_lock); + AutoLock auto_lock(&fdent_lock); pagelist.Init(0, false, true); pending_status = CREATE_FILE_PENDING; @@ -2541,7 +2541,7 @@ void FdEntity::MarkDirtyNewFile() bool FdEntity::IsDirtyNewFile() const { - AutoLock auto_lock(&fdent_data_lock); + AutoLock auto_lock(&fdent_lock); return (CREATE_FILE_PENDING == pending_status); } diff --git a/src/s3fs.cpp b/src/s3fs.cpp index 8b0c785..c00c17e 100644 --- a/src/s3fs.cpp +++ b/src/s3fs.cpp @@ -3022,7 +3022,6 @@ static int s3fs_release(const char* _path, struct fuse_file_info* fi) bool is_new_file = ent->IsDirtyNewFile(); - // TODO: correct locks held? if(0 != (result = ent->UploadPending(static_cast(fi->fh), AutoLock::NONE))){ S3FS_PRN_ERR("could not upload pending data(meta, etc) for pseudo_fd(%llu) / path(%s)", (unsigned long long)(fi->fh), path); return result;