summaryrefslogtreecommitdiff
path: root/cpp/src/Freeze/SharedDbEnv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Freeze/SharedDbEnv.cpp')
-rw-r--r--cpp/src/Freeze/SharedDbEnv.cpp40
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())
{
//