summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/PropertiesAdminI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2012-09-03 14:40:42 +0200
committerBenoit Foucher <benoit@zeroc.com>2012-09-03 14:40:42 +0200
commit9c5efa7f3c9049d16e6e1d3e2259a04fcf6812a8 (patch)
tree1b27e7ae3164dcb3b34efe7ba97303a218f3f555 /cpp/src/Ice/PropertiesAdminI.cpp
parentUpdate Metrics tables to use introspection (diff)
downloadice-9c5efa7f3c9049d16e6e1d3e2259a04fcf6812a8.tar.bz2
ice-9c5efa7f3c9049d16e6e1d3e2259a04fcf6812a8.tar.xz
ice-9c5efa7f3c9049d16e6e1d3e2259a04fcf6812a8.zip
Bug fixes
Diffstat (limited to 'cpp/src/Ice/PropertiesAdminI.cpp')
-rw-r--r--cpp/src/Ice/PropertiesAdminI.cpp33
1 files changed, 21 insertions, 12 deletions
diff --git a/cpp/src/Ice/PropertiesAdminI.cpp b/cpp/src/Ice/PropertiesAdminI.cpp
index fc929bb959a..93650cc5259 100644
--- a/cpp/src/Ice/PropertiesAdminI.cpp
+++ b/cpp/src/Ice/PropertiesAdminI.cpp
@@ -40,7 +40,7 @@ Ice::PropertiesAdminI::setProperties_async(const AMD_PropertiesAdmin_setProperti
const Ice::Current&)
{
PropertyDict added, changed, removed;
- PropertiesAdminUpdateCallbackPtr callback;
+ vector<PropertiesAdminUpdateCallbackPtr> callbacks;
{
IceUtil::Mutex::Lock sync(*this);
@@ -154,7 +154,7 @@ Ice::PropertiesAdminI::setProperties_async(const AMD_PropertiesAdmin_setProperti
_properties->setProperty(p->first, "");
}
- callback = _updateCallback;
+ callbacks = _updateCallbacks;
}
//
@@ -162,26 +162,35 @@ Ice::PropertiesAdminI::setProperties_async(const AMD_PropertiesAdmin_setProperti
//
cb->ice_response();
- if(callback)
+ if(!callbacks.empty())
{
PropertyDict changes = added;
changes.insert(changed.begin(), changed.end());
changes.insert(removed.begin(), removed.end());
-
- try
- {
- callback->updated(changes);
- }
- catch(...)
+ for(vector<PropertiesAdminUpdateCallbackPtr>::const_iterator p = callbacks.begin(); p != callbacks.end(); ++p)
{
- // Ignore.
+ try
+ {
+ (*p)->updated(changes);
+ }
+ catch(...)
+ {
+ // Ignore.
+ }
}
}
}
void
-Ice::PropertiesAdminI::setUpdateCallback(const PropertiesAdminUpdateCallbackPtr& cb)
+Ice::PropertiesAdminI::addUpdateCallback(const PropertiesAdminUpdateCallbackPtr& cb)
+{
+ IceUtil::Mutex::Lock sync(*this);
+ _updateCallbacks.push_back(cb);
+}
+
+void
+Ice::PropertiesAdminI::removeUpdateCallback(const PropertiesAdminUpdateCallbackPtr& cb)
{
IceUtil::Mutex::Lock sync(*this);
- _updateCallback = cb;
+ _updateCallbacks.erase(remove(_updateCallbacks.begin(), _updateCallbacks.end(), cb), _updateCallbacks.end());
}