summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/CommunicatorI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/CommunicatorI.cpp')
-rw-r--r--cpp/src/Ice/CommunicatorI.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp
index 52f4bd86d6c..d7aabbebd47 100644
--- a/cpp/src/Ice/CommunicatorI.cpp
+++ b/cpp/src/Ice/CommunicatorI.cpp
@@ -30,6 +30,7 @@ using namespace Ice;
using namespace IceInternal;
int Ice::CommunicatorI::_communicatorCount = 0;
+IceUtil::StaticMutex Ice::CommunicatorI::_gcMutex = ICE_STATIC_MUTEX_INITIALIZER;
Ice::CommunicatorI::GarbageCollectorStats Ice::CommunicatorI::_gcStats;
int Ice::CommunicatorI::_gcTraceLevel;
string Ice::CommunicatorI::_gcTraceCat;
@@ -69,6 +70,8 @@ Ice::CommunicatorI::destroy()
if(last)
{
+ IceUtil::StaticMutex::Lock l(_gcMutex);
+
if(_gcTraceLevel)
{
Trace out(_gcLogger, _gcTraceCat);
@@ -79,6 +82,7 @@ Ice::CommunicatorI::destroy()
out << "s";
}
}
+ _gcTraceLevel = 0;
_gcLogger = 0;
}
@@ -336,9 +340,12 @@ Ice::CommunicatorI::CommunicatorI(int& argc, char* argv[], const PropertiesPtr&
IceUtil::RecMutex::Lock sync(*this);
if(++_communicatorCount == 1)
{
- _gcTraceLevel = _instance->traceLevels()->gc;
- _gcTraceCat = _instance->traceLevels()->gcCat;
- _gcLogger = _instance->logger();
+ {
+ IceUtil::StaticMutex::Lock l(_gcMutex);
+ _gcTraceLevel = _instance->traceLevels()->gc;
+ _gcTraceCat = _instance->traceLevels()->gcCat;
+ _gcLogger = _instance->logger();
+ }
theCollector = new IceUtil::GC(properties->getPropertyAsInt("Ice.GC.Interval"), printGCStats);
theCollector->start();
}
@@ -376,6 +383,8 @@ Ice::CommunicatorI::finishSetup(int& argc, char* argv[])
void
Ice::CommunicatorI::printGCStats(const ::IceUtil::GCStats& stats)
{
+ IceUtil::StaticMutex::Lock l(_gcMutex);
+
if(_gcTraceLevel)
{
if(_gcTraceLevel > 1)