diff options
author | Benoit Foucher <benoit@zeroc.com> | 2004-07-18 15:14:23 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2004-07-18 15:14:23 +0000 |
commit | a33f6da11eb6dc712cb30371649bc0ba2e4fd9ba (patch) | |
tree | ff23cdf6356a2e044966657c439f67a8801e186a /cpp/src/Ice/SliceChecksums.cpp | |
parent | minor (diff) | |
download | ice-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.cpp | 27 |
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])); } } |