diff options
author | Benoit Foucher <benoit@zeroc.com> | 2007-01-30 13:42:20 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2007-01-30 13:42:20 +0000 |
commit | 6af8a2560af03ea897d3f9177426b9dd342747de (patch) | |
tree | e4083068651580af27870f72f123fa7aaeeeb9fb /cpp/src/IceGrid/Topics.cpp | |
parent | BCC compile erroes (diff) | |
download | ice-6af8a2560af03ea897d3f9177426b9dd342747de.tar.bz2 ice-6af8a2560af03ea897d3f9177426b9dd342747de.tar.xz ice-6af8a2560af03ea897d3f9177426b9dd342747de.zip |
Fixes
Diffstat (limited to 'cpp/src/IceGrid/Topics.cpp')
-rw-r--r-- | cpp/src/IceGrid/Topics.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/cpp/src/IceGrid/Topics.cpp b/cpp/src/IceGrid/Topics.cpp index 5e5aa3dfd6d..546729cf464 100644 --- a/cpp/src/IceGrid/Topics.cpp +++ b/cpp/src/IceGrid/Topics.cpp @@ -51,22 +51,17 @@ ObserverTopic::subscribe(const Ice::ObjectPrx& obsv, const string& name) return; } - // - // We need to ensure that this observer isn't already registered - // as IceStorm might otherwise replace a previous subscriber - // without any notification. - // assert(obsv); - if(_subscribers.find(obsv->ice_getIdentity()) != _subscribers.end()) + try + { + IceStorm::QoS qos; + qos["reliability"] = "ordered"; + initObserver(_topic->subscribeAndGetPublisher(qos, obsv->ice_twoway())); + } + catch(const IceStorm::AlreadySubscribed&) { throw ObserverAlreadyRegisteredException(obsv->ice_getIdentity()); } - - IceStorm::QoS qos; - qos["reliability"] = "ordered"; - initObserver(_topic->subscribeAndGetPublisher(qos, obsv->ice_twoway())); - - _subscribers.insert(obsv->ice_getIdentity()); if(!name.empty()) { @@ -87,7 +82,6 @@ ObserverTopic::unsubscribe(const Ice::ObjectPrx& observer, const string& name) } assert(observer); - _subscribers.erase(observer->ice_getIdentity()); if(!name.empty()) { |