Apparently I can't reuse those references, as it leads to every kind of bugs. I wonder if it's just plain wrong or it's a gcc bug. Minor changes.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13292 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2005-06-27 12:35:14 +00:00
parent 08d9a6e30d
commit 418ab0643a
+10 -12
View File
@@ -695,7 +695,8 @@ BHandler::StopWatchingAll(BMessenger messenger)
status_t status_t
BHandler::StartWatching(BHandler *handler, uint32 what) BHandler::StartWatching(BHandler *handler, uint32 what)
{ {
fObserverList ? fObserverList : fObserverList = new _ObserverList; if (fObserverList == NULL)
fObserverList = new _ObserverList;
return fObserverList->StartObserving(handler, what); return fObserverList->StartObserving(handler, what);
} }
@@ -703,8 +704,7 @@ BHandler::StartWatching(BHandler *handler, uint32 what)
status_t status_t
BHandler::StartWatchingAll(BHandler *handler) BHandler::StartWatchingAll(BHandler *handler)
{ {
fObserverList ? fObserverList : fObserverList = new _ObserverList; return StartWatching(handler, B_OBSERVER_OBSERVE_ALL);
return fObserverList->StartObserving(handler, B_OBSERVER_OBSERVE_ALL);
} }
@@ -734,7 +734,7 @@ BHandler::Perform(perform_code d, void *arg)
void void
BHandler::SendNotices(uint32 what, const BMessage *msg) BHandler::SendNotices(uint32 what, const BMessage *msg)
{ {
fObserverList ? fObserverList : fObserverList = new _ObserverList; if (fObserverList != NULL)
fObserverList->SendNotices(what, msg); fObserverList->SendNotices(what, msg);
} }
@@ -825,24 +825,22 @@ _ObserverList::SendNotices(unsigned long what, BMessage const *message)
} }
vector<BMessenger> &messengers = fMessengerMap[what]; vector<BMessenger> &messengers = fMessengerMap[what];
for (uint32 i = 0; i < messengers.size(); ++i) { for (uint32 i = 0; i < messengers.size(); ++i)
messengers[i].SendMessage(copyMsg); messengers[i].SendMessage(copyMsg);
}
// We have to send the message also to the handlers // We have to send the message also to the handlers
// and messengers which were subscribed to ALL events, // and messengers which were subscribed to ALL events,
// since they aren't caught by the above loops. // since they aren't caught by the above loops.
// TODO: cleanup // TODO: cleanup
handlers = fHandlerMap[B_OBSERVER_OBSERVE_ALL]; vector<BHandler *> &handlersAll = fHandlerMap[B_OBSERVER_OBSERVE_ALL];
for (uint32 i = 0; i < handlers.size(); ++i) { for (uint32 i = 0; i < handlersAll.size(); ++i) {
BMessenger msgr(handlers[i]); BMessenger msgr(handlersAll[i]);
msgr.SendMessage(copyMsg); msgr.SendMessage(copyMsg);
} }
messengers = fMessengerMap[B_OBSERVER_OBSERVE_ALL]; vector<BMessenger> &messengersAll = fMessengerMap[B_OBSERVER_OBSERVE_ALL];
for (uint32 i = 0; i < messengers.size(); ++i) { for (uint32 i = 0; i < messengersAll.size(); ++i)
messengers[i].SendMessage(copyMsg); messengers[i].SendMessage(copyMsg);
}
// Gotta make sure to clean up the annoying temporary ... // Gotta make sure to clean up the annoying temporary ...
delete copyMsg; delete copyMsg;