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 {