Mercurial > hg > orthanc-stone
comparison Framework/Messages/IObservable.cpp @ 977:262a0244e9b2 toa2019090201
Added missing Unregister for objects that register by the broker + logs + guard in FetchContext
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 02 Sep 2019 17:29:26 +0200 |
parents | 38409549db43 |
children | e713f1a99861 2d8ab34c8c91 |
comparison
equal
deleted
inserted
replaced
976:3abc47e051c8 | 977:262a0244e9b2 |
---|---|
64 callables_[id].insert(callable); | 64 callables_[id].insert(callable); |
65 } | 65 } |
66 | 66 |
67 void IObservable::Unregister(IObserver *observer) | 67 void IObservable::Unregister(IObserver *observer) |
68 { | 68 { |
69 LOG(TRACE) << "IObservable::Unregister for IObserver at addr: " | |
70 << std::hex << observer << std::dec; | |
69 // delete all callables from this observer | 71 // delete all callables from this observer |
70 for (Callables::iterator itCallableSet = callables_.begin(); | 72 for (Callables::iterator itCallableSet = callables_.begin(); |
71 itCallableSet != callables_.end(); ++itCallableSet) | 73 itCallableSet != callables_.end(); ++itCallableSet) |
72 { | 74 { |
73 for (std::set<ICallable*>::const_iterator | 75 for (std::set<ICallable*>::const_iterator |
74 itCallable = itCallableSet->second.begin(); itCallable != itCallableSet->second.end(); ) | 76 itCallable = itCallableSet->second.begin(); itCallable != itCallableSet->second.end(); ) |
75 { | 77 { |
76 if ((*itCallable)->GetObserver() == observer) | 78 if ((*itCallable)->GetObserver() == observer) |
77 { | 79 { |
80 LOG(TRACE) << " ** IObservable::Unregister : deleting callable: " | |
81 << std::hex << (*itCallable) << std::dec; | |
78 delete *itCallable; | 82 delete *itCallable; |
79 itCallableSet->second.erase(itCallable++); | 83 itCallableSet->second.erase(itCallable++); |
80 } | 84 } |
81 else | 85 else |
82 ++itCallable; | 86 ++itCallable; |
85 } | 89 } |
86 | 90 |
87 void IObservable::EmitMessageInternal(const IObserver* receiver, | 91 void IObservable::EmitMessageInternal(const IObserver* receiver, |
88 const IMessage& message) | 92 const IMessage& message) |
89 { | 93 { |
94 LOG(TRACE) << "IObservable::EmitMessageInternal receiver = " | |
95 << std::hex << receiver << std::dec; | |
90 Callables::const_iterator found = callables_.find(message.GetIdentifier()); | 96 Callables::const_iterator found = callables_.find(message.GetIdentifier()); |
91 | 97 |
92 if (found != callables_.end()) | 98 if (found != callables_.end()) |
93 { | 99 { |
94 for (std::set<ICallable*>::const_iterator | 100 for (std::set<ICallable*>::const_iterator |
117 | 123 |
118 | 124 |
119 void IObservable::EmitMessage(const IObserver& observer, | 125 void IObservable::EmitMessage(const IObserver& observer, |
120 const IMessage& message) | 126 const IMessage& message) |
121 { | 127 { |
128 LOG(TRACE) << "IObservable::EmitMessage observer = " | |
129 << std::hex << &observer << std::dec; | |
122 EmitMessageInternal(&observer, message); | 130 EmitMessageInternal(&observer, message); |
123 } | 131 } |
124 | |
125 | 132 |
126 void IObservable::RegisterForwarder(IMessageForwarder* forwarder) | 133 void IObservable::RegisterForwarder(IMessageForwarder* forwarder) |
127 { | 134 { |
128 if (forwarder == NULL) | 135 if (forwarder == NULL) |
129 { | 136 { |