summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/SliceChecksums.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2004-07-18 15:14:23 +0000
committerBenoit Foucher <benoit@zeroc.com>2004-07-18 15:14:23 +0000
commita33f6da11eb6dc712cb30371649bc0ba2e4fd9ba (patch)
treeff23cdf6356a2e044966657c439f67a8801e186a /cpp/src/Ice/SliceChecksums.cpp
parentminor (diff)
downloadice-a33f6da11eb6dc712cb30371649bc0ba2e4fd9ba.tar.bz2
ice-a33f6da11eb6dc712cb30371649bc0ba2e4fd9ba.tar.xz
ice-a33f6da11eb6dc712cb30371649bc0ba2e4fd9ba.zip
Lazy initialize the dictionary to fix out of order of static initialization
problem.
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]));
}
}