diff options
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])); } } |