summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/FactoryTableInit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/FactoryTableInit.cpp')
-rw-r--r--cpp/src/Ice/FactoryTableInit.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/cpp/src/Ice/FactoryTableInit.cpp b/cpp/src/Ice/FactoryTableInit.cpp
index c79deff11e3..1e751d6fc3a 100644
--- a/cpp/src/Ice/FactoryTableInit.cpp
+++ b/cpp/src/Ice/FactoryTableInit.cpp
@@ -9,6 +9,8 @@
#include <Ice/FactoryTableInit.h>
#include <Ice/UserExceptionFactory.h>
+#include <IceUtil/Mutex.h>
+#include <IceUtil/MutexPtrLock.h>
namespace IceInternal
{
@@ -24,9 +26,26 @@ ICE_DECLSPEC_EXPORT FactoryTable* factoryTable;
namespace
{
-static int initCount = 0; // Initialization count
-IceUtil::StaticMutex initCountMutex = ICE_STATIC_MUTEX_INITIALIZER;
+int initCount = 0; // Initialization count
+IceUtil::Mutex* initCountMutex = 0;
+class Init
+{
+public:
+
+ Init()
+ {
+ initCountMutex = new IceUtil::Mutex;
+ }
+
+ ~Init()
+ {
+ delete initCountMutex;
+ initCountMutex = 0;
+ }
+};
+
+Init init;
}
@@ -41,7 +60,7 @@ IceUtil::StaticMutex initCountMutex = ICE_STATIC_MUTEX_INITIALIZER;
//
IceInternal::FactoryTableInit::FactoryTableInit()
{
- IceUtil::StaticMutex::Lock lock(initCountMutex);
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(initCountMutex);
if(0 == initCount++)
{
factoryTable = new FactoryTable;
@@ -54,7 +73,7 @@ IceInternal::FactoryTableInit::FactoryTableInit()
//
IceInternal::FactoryTableInit::~FactoryTableInit()
{
- IceUtil::StaticMutex::Lock lock(initCountMutex);
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(initCountMutex);
if(0 == --initCount)
{
delete factoryTable;