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:
+10
-12
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user