summaryrefslogtreecommitdiff
path: root/cpp/src/IceSSL/Instance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceSSL/Instance.cpp')
-rw-r--r--cpp/src/IceSSL/Instance.cpp36
1 files changed, 30 insertions, 6 deletions
diff --git a/cpp/src/IceSSL/Instance.cpp b/cpp/src/IceSSL/Instance.cpp
index 47f40cf1e64..6983eda8c97 100644
--- a/cpp/src/IceSSL/Instance.cpp
+++ b/cpp/src/IceSSL/Instance.cpp
@@ -19,7 +19,8 @@
#include <Ice/Properties.h>
#include <Ice/ProtocolPluginFacade.h>
-#include <IceUtil/StaticMutex.h>
+#include <IceUtil/Mutex.h>
+#include <IceUtil/MutexPtrLock.h>
#include <IceUtil/StringUtil.h>
#include <openssl/rand.h>
@@ -33,9 +34,32 @@ using namespace IceSSL;
IceUtil::Shared* IceInternal::upCast(IceSSL::Instance* p) { return p; }
-static IceUtil::StaticMutex staticMutex = ICE_STATIC_MUTEX_INITIALIZER;
-static int instanceCount = 0;
-static IceUtil::Mutex* locks = 0;
+namespace
+{
+
+IceUtil::Mutex* staticMutex = 0;
+int instanceCount = 0;
+IceUtil::Mutex* locks = 0;
+
+class Init
+{
+public:
+
+ Init()
+ {
+ staticMutex = new IceUtil::Mutex;
+ }
+
+ ~Init()
+ {
+ delete staticMutex;
+ staticMutex = 0;
+ }
+};
+
+Init init;
+
+}
extern "C"
{
@@ -136,7 +160,7 @@ IceSSL::Instance::Instance(const CommunicatorPtr& communicator) :
//
// Initialize OpenSSL if necessary.
//
- IceUtil::StaticMutex::Lock sync(staticMutex);
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
instanceCount++;
if(instanceCount == 1)
@@ -246,7 +270,7 @@ IceSSL::Instance::~Instance()
//
// Clean up OpenSSL resources.
//
- IceUtil::StaticMutex::Lock sync(staticMutex);
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
if(--instanceCount == 0)
{