diff options
Diffstat (limited to 'cpp/include/Ice/MetricsObserverI.h')
-rw-r--r-- | cpp/include/Ice/MetricsObserverI.h | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/cpp/include/Ice/MetricsObserverI.h b/cpp/include/Ice/MetricsObserverI.h index 12d53daf9d5..58ba5291314 100644 --- a/cpp/include/Ice/MetricsObserverI.h +++ b/cpp/include/Ice/MetricsObserverI.h @@ -349,8 +349,9 @@ public: } void - update(const MetricsHelperT<MetricsType>& helper, EntrySeqType& objects) + init(const MetricsHelperT<MetricsType>& helper, EntrySeqType& objects, ObserverT& previous) { + _objects = previous._objects; std::sort(objects.begin(), objects.end()); typename EntrySeqType::const_iterator p = objects.begin(); typename EntrySeqType::iterator q = _objects.begin(); @@ -486,15 +487,14 @@ public: return 0; } - ObserverImplPtrType obsv = ObserverImplPtrType::dynamicCast(observer); - if(!obsv) + ObserverImplPtrType obsv = new ObserverImplType(); + if(!observer) { - obsv = new ObserverImplType(); obsv->init(helper, metricsObjects); } else { - obsv->update(helper, metricsObjects); + obsv->init(helper, metricsObjects, *ObserverImplPtrType::dynamicCast(observer)); } return obsv; } |