diff options
author | Benoit Foucher <benoit@zeroc.com> | 2012-09-03 14:40:42 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2012-09-03 14:40:42 +0200 |
commit | 9c5efa7f3c9049d16e6e1d3e2259a04fcf6812a8 (patch) | |
tree | 1b27e7ae3164dcb3b34efe7ba97303a218f3f555 /cpp/src/Ice/PropertiesAdminI.cpp | |
parent | Update Metrics tables to use introspection (diff) | |
download | ice-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.cpp | 33 |
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()); } |