summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/SliceChecksums.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/SliceChecksums.cpp')
-rw-r--r--cpp/src/Ice/SliceChecksums.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/cpp/src/Ice/SliceChecksums.cpp b/cpp/src/Ice/SliceChecksums.cpp
index 72117c4bed3..c29e2fbb41b 100644
--- a/cpp/src/Ice/SliceChecksums.cpp
+++ b/cpp/src/Ice/SliceChecksums.cpp
@@ -13,21 +13,42 @@
using namespace std;
using namespace Ice;
-static SliceChecksumDict _sliceChecksums;
+static SliceChecksumDict* _sliceChecksums = 0;
static IceUtil::StaticMutex _mutex = ICE_STATIC_MUTEX_INITIALIZER;
+class SliceChecksumDictDestroyer
+{
+public:
+
+ ~SliceChecksumDictDestroyer()
+ {
+ delete _sliceChecksums;
+ _sliceChecksums = 0;
+ }
+};
+static SliceChecksumDictDestroyer destroyer;
+
SliceChecksumDict
Ice::sliceChecksums()
{
IceUtil::StaticMutex::Lock lock(_mutex);
- return _sliceChecksums;
+ if(_sliceChecksums == 0)
+ {
+ _sliceChecksums = new SliceChecksumDict();
+ }
+ return *_sliceChecksums;
}
IceInternal::SliceChecksumInit::SliceChecksumInit(const char* checksums[])
{
IceUtil::StaticMutex::Lock lock(_mutex);
+ if(_sliceChecksums == 0)
+ {
+ _sliceChecksums = new SliceChecksumDict();
+ }
+
for(int i = 0; checksums[i] != 0; i += 2)
{
- _sliceChecksums.insert(SliceChecksumDict::value_type(checksums[i], checksums[i + 1]));
+ _sliceChecksums->insert(SliceChecksumDict::value_type(checksums[i], checksums[i + 1]));
}
}