diff options
Diffstat (limited to 'cpp/src/Freeze/SharedDbEnv.cpp')
-rw-r--r-- | cpp/src/Freeze/SharedDbEnv.cpp | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/cpp/src/Freeze/SharedDbEnv.cpp b/cpp/src/Freeze/SharedDbEnv.cpp index 1763ab688a6..db37d2491cc 100644 --- a/cpp/src/Freeze/SharedDbEnv.cpp +++ b/cpp/src/Freeze/SharedDbEnv.cpp @@ -15,6 +15,8 @@ #include <Freeze/Catalog.h> #include <Freeze/CatalogIndexList.h> +#include <IceUtil/MutexPtrLock.h> +#include <IceUtil/MutexPtrTryLock.h> #include <IceUtil/IceUtil.h> #include <cstdlib> @@ -84,8 +86,34 @@ dbErrCallback(const char* prefix, char* msg) out << "DbEnv \"" << env->getEnvName() << "\": " << msg; } -StaticMutex _mapMutex = ICE_STATIC_MUTEX_INITIALIZER; -StaticMutex _refCountMutex = ICE_STATIC_MUTEX_INITIALIZER; +namespace +{ +Mutex* mapMutex = 0; +Mutex* refCountMutex = 0; + +class Init +{ +public: + + Init() + { + mapMutex = new IceUtil::Mutex; + refCountMutex = new IceUtil::Mutex; + } + + ~Init() + { + delete mapMutex; + mapMutex = 0; + + delete refCountMutex; + refCountMutex = 0; + } +}; + +Init init; + +} typedef map<MapKey, Freeze::SharedDbEnv*> SharedDbEnvMap; SharedDbEnvMap* sharedDbEnvMap; @@ -95,7 +123,7 @@ SharedDbEnvMap* sharedDbEnvMap; Freeze::SharedDbEnvPtr Freeze::SharedDbEnv::get(const CommunicatorPtr& communicator, const string& envName, DbEnv* env) { - StaticMutex::Lock lock(_mapMutex); + IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(mapMutex); if(sharedDbEnvMap == 0) { @@ -231,13 +259,13 @@ Freeze::SharedDbEnv::removeSharedMapDb(const string& dbName) void Freeze::SharedDbEnv::__incRef() { - IceUtil::StaticMutex::Lock lock(_refCountMutex); + IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(refCountMutex); _refCount++; } void Freeze::SharedDbEnv::__decRef() { - IceUtil::StaticMutex::Lock lock(_refCountMutex); + IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(refCountMutex); if(--_refCount == 0) { MapKey key; @@ -245,7 +273,7 @@ void Freeze::SharedDbEnv::__decRef() key.communicator = _communicator; - IceUtil::StaticMutex::TryLock mapLock(_mapMutex); + IceUtilInternal::MutexPtrTryLock<IceUtil::Mutex> mapLock(mapMutex); if(!mapLock.acquired()) { // |