From 4a576f7f9b230e72114d58820ba9bf5f58bdffc4 Mon Sep 17 00:00:00 2001 From: "815331793@qq.com" <815331793@qq.com> Date: Tue, 4 Jun 2019 10:44:02 +0800 Subject: [PATCH] add fdent_lock in serveral FdEntity operation --- configure.ac | 2 +- src/fdcache.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 0e5fa71..8ba877f 100644 --- a/configure.ac +++ b/configure.ac @@ -21,7 +21,7 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT(cosfs, 1.0.13) +AC_INIT(cosfs, 1.0.14) AC_CONFIG_HEADER([config.h]) AC_CANONICAL_SYSTEM diff --git a/src/fdcache.cpp b/src/fdcache.cpp index b91de6d..9df5bcd 100644 --- a/src/fdcache.cpp +++ b/src/fdcache.cpp @@ -879,10 +879,10 @@ bool FdEntity::OpenAndLoadAll(headers_t* pmeta, size_t* size, bool force_load) bool FdEntity::GetStats(struct stat& st) { + AutoLock auto_lock(&fdent_lock); if(-1 == fd){ return false; } - AutoLock auto_lock(&fdent_lock); memset(&st, 0, sizeof(struct stat)); if(-1 == fstat(fd, &st)){ @@ -899,8 +899,8 @@ int FdEntity::SetMtime(time_t time) if(-1 == time){ return 0; } + AutoLock auto_lock(&fdent_lock); if(-1 != fd){ - AutoLock auto_lock(&fdent_lock); struct timeval tv[2]; tv[0].tv_sec = time; @@ -928,6 +928,7 @@ int FdEntity::SetMtime(time_t time) bool FdEntity::UpdateMtime(void) { + AutoLock auto_lock(&fdent_lock); struct stat st; if(!GetStats(st)){ return false; @@ -949,18 +950,21 @@ bool FdEntity::GetSize(size_t& size) bool FdEntity::SetMode(mode_t mode) { + AutoLock auto_lock(&fdent_lock); orgmeta["x-cos-meta-mode"] = str(mode); return true; } bool FdEntity::SetUId(uid_t uid) { + AutoLock auto_lock(&fdent_lock); orgmeta["x-cos-meta-uid"] = str(uid); return true; } bool FdEntity::SetGId(gid_t gid) { + AutoLock auto_lock(&fdent_lock); orgmeta["x-cos-meta-gid"] = str(gid); return true; } @@ -970,6 +974,7 @@ bool FdEntity::SetContentType(const char* path) if(!path){ return false; } + AutoLock auto_lock(&fdent_lock); orgmeta["Content-Type"] = S3fsCurl::LookupMimeType(string(path)); return true; } @@ -1885,6 +1890,7 @@ FdEntity* FdManager::ExistOpen(const char* path, int existfd, bool ignore_existf void FdManager::Rename(const std::string &from, const std::string &to) { + AutoLock auto_lock(&FdManager::fd_manager_lock); fdent_map_t::iterator iter = fent.find(from); if(fent.end() != iter){ // found