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.cpp37
1 files changed, 35 insertions, 2 deletions
diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp
index 26099f3b815..394fbee017c 100644
--- a/cpp/src/Ice/Instance.cpp
+++ b/cpp/src/Ice/Instance.cpp
@@ -35,8 +35,10 @@
#include <Ice/LoggerUtil.h>
#include <IceUtil/StringUtil.h>
#include <Ice/PropertiesI.h>
-#include <IceUtil/UUID.h>
#include <Ice/Communicator.h>
+#include <Ice/Observer.h>
+
+#include <IceUtil/UUID.h>
#include <IceUtil/Mutex.h>
#include <IceUtil/MutexPtrLock.h>
@@ -102,6 +104,33 @@ public:
Init init;
+class ObserverUpdaterI : public Ice::ObserverUpdater
+{
+public:
+
+ ObserverUpdaterI(InstancePtr instance) : _instance(instance)
+ {
+ }
+
+ void updateConnectionObservers()
+ {
+ _instance->outgoingConnectionFactory()->updateConnectionObservers();
+ _instance->objectAdapterFactory()->updateConnectionObservers();
+ }
+
+ void updateThreadObservers()
+ {
+ }
+
+ void updateThreadPoolThreadObservers()
+ {
+ }
+
+private:
+
+ InstancePtr _instance;
+};
+
}
IceUtil::Shared* IceInternal::upCast(Instance* p) { return p; }
@@ -1005,7 +1034,6 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi
_retryQueue = new RetryQueue(this);
-
if(_initData.wstringConverter == 0)
{
_initData.wstringConverter = new UnicodeWstringConverter();
@@ -1082,6 +1110,11 @@ IceInternal::Instance::~Instance()
void
IceInternal::Instance::finishSetup(int& argc, char* argv[])
{
+ if(_initData.observerResolver)
+ {
+ _initData.observerResolver->setObserverUpdater(new ObserverUpdaterI(this));
+ }
+
//
// Load plug-ins.
//