summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2004-07-17 00:29:21 +0000
committerMark Spruiell <mes@zeroc.com>2004-07-17 00:29:21 +0000
commit6b27b852c66b2a66c8ef87b3214a0eda0e4d9cb5 (patch)
tree5df49096e9f9e845df8e06191cc66b84b307bf6c /cpp/src
parentrestoring some properties; adding some missing ones (diff)
downloadice-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.cpp2
-rw-r--r--cpp/src/Ice/SliceChecksums.cpp14
-rw-r--r--cpp/src/IceBox/Admin.cpp3
-rw-r--r--cpp/src/IceBox/ServiceManagerI.cpp2
-rw-r--r--cpp/src/IcePack/AdminI.cpp2
-rw-r--r--cpp/src/IcePack/Client.cpp3
-rw-r--r--cpp/src/IcePatch/Client.cpp4
-rw-r--r--cpp/src/IcePatch/IcePatchI.cpp2
-rw-r--r--cpp/src/IceStorm/Admin.cpp3
-rw-r--r--cpp/src/IceStorm/TopicManagerI.cpp2
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