diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2007-08-24 11:28:20 -0400 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2007-08-24 11:28:20 -0400 |
commit | 9a07052d6711858507faa27ff736d4520b3163e9 (patch) | |
tree | 7fa0a0406be0386a8314b2e8c742f29bf127b70d /cpp/src/IceGrid/ReplicaSessionI.cpp | |
parent | Merge branch 'master' of ssh://cvs.zeroc.com/home/git/ice (diff) | |
parent | Squashed commit of the following: (diff) | |
download | ice-9a07052d6711858507faa27ff736d4520b3163e9.tar.bz2 ice-9a07052d6711858507faa27ff736d4520b3163e9.tar.xz ice-9a07052d6711858507faa27ff736d4520b3163e9.zip |
Merge branch 'master' of ssh://cvs.zeroc.com/home/git/ice
Diffstat (limited to 'cpp/src/IceGrid/ReplicaSessionI.cpp')
-rw-r--r-- | cpp/src/IceGrid/ReplicaSessionI.cpp | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/cpp/src/IceGrid/ReplicaSessionI.cpp b/cpp/src/IceGrid/ReplicaSessionI.cpp index 1fb589470a2..6de154a0ee5 100644 --- a/cpp/src/IceGrid/ReplicaSessionI.cpp +++ b/cpp/src/IceGrid/ReplicaSessionI.cpp @@ -97,15 +97,30 @@ ReplicaSessionI::getTimeout(const Ice::Current& current) const void ReplicaSessionI::setDatabaseObserver(const DatabaseObserverPrx& observer, const Ice::Current& current) { - Lock sync(*this); - if(_destroy) + int serialApplicationObserver; + int serialAdapterObserver; + int serialObjectObserver; + + const ObserverTopicPtr applicationObserver = _database->getObserverTopic(ApplicationObserverTopicName); + const ObserverTopicPtr adapterObserver = _database->getObserverTopic(AdapterObserverTopicName); + const ObserverTopicPtr objectObserver = _database->getObserverTopic(ObjectObserverTopicName); + { - throw Ice::ObjectNotExistException(__FILE__, __LINE__); - } - _observer = observer; - _database->getObserverTopic(ApplicationObserverTopicName)->subscribe(_observer, _info->name); - _database->getObserverTopic(AdapterObserverTopicName)->subscribe(_observer, _info->name); - _database->getObserverTopic(ObjectObserverTopicName)->subscribe(_observer, _info->name); + Lock sync(*this); + if(_destroy) + { + throw Ice::ObjectNotExistException(__FILE__, __LINE__); + } + _observer = observer; + + serialApplicationObserver = applicationObserver->subscribe(_observer, _info->name); + serialAdapterObserver = adapterObserver->subscribe(_observer, _info->name); + serialObjectObserver = objectObserver->subscribe(_observer, _info->name); + } + + applicationObserver->waitForSyncedSubscribers(serialApplicationObserver, _info->name); + adapterObserver->waitForSyncedSubscribers(serialAdapterObserver, _info->name); + objectObserver->waitForSyncedSubscribers(serialObjectObserver, _info->name); } void |