summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Instance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Instance.cpp')
-rw-r--r--cpp/src/Ice/Instance.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp
index 19372b51a64..6a97c72efd7 100644
--- a/cpp/src/Ice/Instance.cpp
+++ b/cpp/src/Ice/Instance.cpp
@@ -21,6 +21,7 @@
#include <Ice/ProxyFactory.h>
#include <Ice/ThreadPool.h>
#include <Ice/ConnectionFactory.h>
+#include <Ice/ConnectionMonitor.h>
#include <Ice/ObjectFactoryManager.h>
#include <Ice/UserExceptionFactoryManager.h>
#include <Ice/LocalException.h>
@@ -155,6 +156,13 @@ IceInternal::Instance::outgoingConnectionFactory()
return _outgoingConnectionFactory;
}
+ConnectionMonitorPtr
+IceInternal::Instance::connectionMonitor()
+{
+ IceUtil::RecMutex::Lock sync(*this);
+ return _connectionMonitor;
+}
+
ObjectFactoryManagerPtr
IceInternal::Instance::servantFactoryManager()
{
@@ -351,6 +359,13 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, int& argc,
_outgoingConnectionFactory = new OutgoingConnectionFactory(this);
+ int acmTimeout = _properties->getPropertyAsInt("Ice.ConnectionIdleTime");
+ int interval = _properties->getPropertyAsIntWithDefault("Ice.MonitorConnections", acmTimeout);
+ if(interval > 0)
+ {
+ _connectionMonitor = new ConnectionMonitor(this, interval);
+ }
+
_servantFactoryManager = new ObjectFactoryManager();
_userExceptionFactoryManager = new UserExceptionFactoryManager();
@@ -374,6 +389,7 @@ IceInternal::Instance::~Instance()
assert(!_referenceFactory);
assert(!_proxyFactory);
assert(!_outgoingConnectionFactory);
+ assert(!_connectionMonitor);
assert(!_servantFactoryManager);
assert(!_userExceptionFactoryManager);
assert(!_objectAdapterFactory);
@@ -516,6 +532,12 @@ IceInternal::Instance::destroy()
_objectAdapterFactory = 0;
_outgoingConnectionFactory = 0;
+ if(_connectionMonitor)
+ {
+ _connectionMonitor->destroy();
+ _connectionMonitor = 0;
+ }
+
if(_serverThreadPool)
{
_serverThreadPool->destroy();