diff options
author | Mark Spruiell <mes@zeroc.com> | 2004-07-17 00:29:21 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2004-07-17 00:29:21 +0000 |
commit | 6b27b852c66b2a66c8ef87b3214a0eda0e4d9cb5 (patch) | |
tree | 5df49096e9f9e845df8e06191cc66b84b307bf6c /cpp/src | |
parent | restoring some properties; adding some missing ones (diff) | |
download | ice-6b27b852c66b2a66c8ef87b3214a0eda0e4d9cb5.tar.bz2 ice-6b27b852c66b2a66c8ef87b3214a0eda0e4d9cb5.tar.xz ice-6b27b852c66b2a66c8ef87b3214a0eda0e4d9cb5.zip |
thread-safety changes for checksums
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Glacier/StarterI.cpp | 2 | ||||
-rw-r--r-- | cpp/src/Ice/SliceChecksums.cpp | 14 | ||||
-rw-r--r-- | cpp/src/IceBox/Admin.cpp | 3 | ||||
-rw-r--r-- | cpp/src/IceBox/ServiceManagerI.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IcePack/AdminI.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IcePack/Client.cpp | 3 | ||||
-rw-r--r-- | cpp/src/IcePatch/Client.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IcePatch/IcePatchI.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IceStorm/Admin.cpp | 3 | ||||
-rw-r--r-- | cpp/src/IceStorm/TopicManagerI.cpp | 2 |
10 files changed, 23 insertions, 14 deletions
diff --git a/cpp/src/Glacier/StarterI.cpp b/cpp/src/Glacier/StarterI.cpp index 35c97ddd5a8..55d46c6cab2 100644 --- a/cpp/src/Glacier/StarterI.cpp +++ b/cpp/src/Glacier/StarterI.cpp @@ -750,7 +750,7 @@ Glacier::StarterI::startRouter(const string& userId, const string& password, Byt SliceChecksumDict Glacier::StarterI::getSliceChecksums(const Current&) const { - return sliceChecksums; + return sliceChecksums(); } Glacier::CryptPasswordVerifierI::CryptPasswordVerifierI(const map<string, string>& passwords) : diff --git a/cpp/src/Ice/SliceChecksums.cpp b/cpp/src/Ice/SliceChecksums.cpp index fe6a6c992c2..72117c4bed3 100644 --- a/cpp/src/Ice/SliceChecksums.cpp +++ b/cpp/src/Ice/SliceChecksums.cpp @@ -8,20 +8,26 @@ // ********************************************************************** #include <Ice/SliceChecksums.h> +#include <IceUtil/StaticMutex.h> using namespace std; using namespace Ice; -namespace Ice +static SliceChecksumDict _sliceChecksums; +static IceUtil::StaticMutex _mutex = ICE_STATIC_MUTEX_INITIALIZER; + +SliceChecksumDict +Ice::sliceChecksums() { -const SliceChecksumDict sliceChecksums; + IceUtil::StaticMutex::Lock lock(_mutex); + return _sliceChecksums; } IceInternal::SliceChecksumInit::SliceChecksumInit(const char* checksums[]) { - SliceChecksumDict& m = const_cast<SliceChecksumDict&>(sliceChecksums); + IceUtil::StaticMutex::Lock lock(_mutex); for(int i = 0; checksums[i] != 0; i += 2) { - m.insert(SliceChecksumDict::value_type(checksums[i], checksums[i + 1])); + _sliceChecksums.insert(SliceChecksumDict::value_type(checksums[i], checksums[i + 1])); } } diff --git a/cpp/src/IceBox/Admin.cpp b/cpp/src/IceBox/Admin.cpp index 4cb7c03dbfd..2f25c05a8a5 100644 --- a/cpp/src/IceBox/Admin.cpp +++ b/cpp/src/IceBox/Admin.cpp @@ -119,7 +119,8 @@ Client::run(int argc, char* argv[]) } Ice::SliceChecksumDict serverChecksums = manager->getSliceChecksums(); - for(Ice::SliceChecksumDict::const_iterator p = Ice::sliceChecksums.begin(); p != Ice::sliceChecksums.end(); ++p) + Ice::SliceChecksumDict localChecksums = Ice::sliceChecksums(); + for(Ice::SliceChecksumDict::const_iterator p = localChecksums.begin(); p != localChecksums.end(); ++p) { Ice::SliceChecksumDict::const_iterator q = serverChecksums.find(p->first); if(q == serverChecksums.end() || p->second != q->second) diff --git a/cpp/src/IceBox/ServiceManagerI.cpp b/cpp/src/IceBox/ServiceManagerI.cpp index 71e41614e0a..2f924b8e88f 100644 --- a/cpp/src/IceBox/ServiceManagerI.cpp +++ b/cpp/src/IceBox/ServiceManagerI.cpp @@ -41,7 +41,7 @@ IceBox::ServiceManagerI::~ServiceManagerI() SliceChecksumDict IceBox::ServiceManagerI::getSliceChecksums(const Current&) const { - return sliceChecksums; + return sliceChecksums(); } void diff --git a/cpp/src/IcePack/AdminI.cpp b/cpp/src/IcePack/AdminI.cpp index 2e67a00ca25..a41dd331c13 100644 --- a/cpp/src/IcePack/AdminI.cpp +++ b/cpp/src/IcePack/AdminI.cpp @@ -1477,5 +1477,5 @@ IcePack::AdminI::shutdown(const Current&) SliceChecksumDict IcePack::AdminI::getSliceChecksums(const Current&) const { - return sliceChecksums; + return sliceChecksums(); } diff --git a/cpp/src/IcePack/Client.cpp b/cpp/src/IcePack/Client.cpp index 234c0b106d7..09e37558291 100644 --- a/cpp/src/IcePack/Client.cpp +++ b/cpp/src/IcePack/Client.cpp @@ -151,7 +151,8 @@ Client::run(int argc, char* argv[]) } Ice::SliceChecksumDict serverChecksums = admin->getSliceChecksums(); - for(Ice::SliceChecksumDict::const_iterator q = Ice::sliceChecksums.begin(); q != Ice::sliceChecksums.end(); ++q) + Ice::SliceChecksumDict localChecksums = Ice::sliceChecksums(); + for(Ice::SliceChecksumDict::const_iterator q = localChecksums.begin(); q != localChecksums.end(); ++q) { Ice::SliceChecksumDict::const_iterator r = serverChecksums.find(q->first); if(r == serverChecksums.end() || q->second != r->second) diff --git a/cpp/src/IcePatch/Client.cpp b/cpp/src/IcePatch/Client.cpp index 7bd5af6d10f..7bcc1a93903 100644 --- a/cpp/src/IcePatch/Client.cpp +++ b/cpp/src/IcePatch/Client.cpp @@ -268,8 +268,8 @@ IcePatch::Client::run(int argc, char* argv[]) } Ice::SliceChecksumDict serverChecksums = top->getSliceChecksums(); - for(Ice::SliceChecksumDict::const_iterator q = Ice::sliceChecksums.begin(); q != Ice::sliceChecksums.end(); - ++q) + Ice::SliceChecksumDict localChecksums = Ice::sliceChecksums(); + for(Ice::SliceChecksumDict::const_iterator q = localChecksums.begin(); q != localChecksums.end(); ++q) { Ice::SliceChecksumDict::const_iterator r = serverChecksums.find(q->first); if(r == serverChecksums.end() || q->second != r->second) diff --git a/cpp/src/IcePatch/IcePatchI.cpp b/cpp/src/IcePatch/IcePatchI.cpp index 8506aa83d86..5dfb3e408eb 100644 --- a/cpp/src/IcePatch/IcePatchI.cpp +++ b/cpp/src/IcePatch/IcePatchI.cpp @@ -36,7 +36,7 @@ IcePatch::FileI::FileI(const ObjectAdapterPtr& adapter, const string& dir) : SliceChecksumDict IcePatch::FileI::getSliceChecksums(const Current&) const { - return sliceChecksums; + return sliceChecksums(); } ByteSeq diff --git a/cpp/src/IceStorm/Admin.cpp b/cpp/src/IceStorm/Admin.cpp index 4aa97d99965..f1752731aa6 100644 --- a/cpp/src/IceStorm/Admin.cpp +++ b/cpp/src/IceStorm/Admin.cpp @@ -156,7 +156,8 @@ Client::run(int argc, char* argv[]) } Ice::SliceChecksumDict serverChecksums = manager->getSliceChecksums(); - for(Ice::SliceChecksumDict::const_iterator q = Ice::sliceChecksums.begin(); q != Ice::sliceChecksums.end(); ++q) + Ice::SliceChecksumDict localChecksums = Ice::sliceChecksums(); + for(Ice::SliceChecksumDict::const_iterator q = localChecksums.begin(); q != localChecksums.end(); ++q) { Ice::SliceChecksumDict::const_iterator r = serverChecksums.find(q->first); if(r == serverChecksums.end() || q->second != r->second) diff --git a/cpp/src/IceStorm/TopicManagerI.cpp b/cpp/src/IceStorm/TopicManagerI.cpp index 3d6dac46288..75089c7151a 100644 --- a/cpp/src/IceStorm/TopicManagerI.cpp +++ b/cpp/src/IceStorm/TopicManagerI.cpp @@ -134,7 +134,7 @@ TopicManagerI::retrieveAll(const Ice::Current&) const Ice::SliceChecksumDict TopicManagerI::getSliceChecksums(const Ice::Current&) const { - return Ice::sliceChecksums; + return Ice::sliceChecksums(); } void |