summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/Topics.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2007-01-30 13:42:20 +0000
committerBenoit Foucher <benoit@zeroc.com>2007-01-30 13:42:20 +0000
commit6af8a2560af03ea897d3f9177426b9dd342747de (patch)
treee4083068651580af27870f72f123fa7aaeeeb9fb /cpp/src/IceGrid/Topics.cpp
parentBCC compile erroes (diff)
downloadice-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.cpp20
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())
{