summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2011-02-08 05:16:50 +0000
committerJim Ingham <jingham@apple.com>2011-02-08 05:16:50 +0000
commitc4f4f72137b728213fc5cded91b162e356dc667f (patch)
tree7adc3f4ec6d77cd8864336ba5cc22323ae184b6b /lldb/source
parentcedb5820ff4908cf5f32fb5ab8b822e68bf8a39e (diff)
downloadbcm5719-llvm-c4f4f72137b728213fc5cded91b162e356dc667f.tar.gz
bcm5719-llvm-c4f4f72137b728213fc5cded91b162e356dc667f.zip
Change the Hijacking interposer to a stack of interposers.
llvm-svn: 125080
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Core/Broadcaster.cpp31
1 files changed, 15 insertions, 16 deletions
diff --git a/lldb/source/Core/Broadcaster.cpp b/lldb/source/Core/Broadcaster.cpp
index 702c14c586b..31b26b4bacf 100644
--- a/lldb/source/Core/Broadcaster.cpp
+++ b/lldb/source/Core/Broadcaster.cpp
@@ -25,8 +25,8 @@ Broadcaster::Broadcaster (const char *name) :
m_broadcaster_name (name),
m_listeners (),
m_listeners_mutex (Mutex::eMutexTypeRecursive),
- m_hijacking_listener(NULL),
- m_hijacking_mask(UINT32_MAX)
+ m_hijacking_listeners(),
+ m_hijacking_masks()
{
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
if (log)
@@ -153,7 +153,7 @@ Broadcaster::EventTypeHasListeners (uint32_t event_type)
{
Mutex::Locker locker (m_listeners_mutex);
- if (m_hijacking_listener != NULL && event_type & m_hijacking_mask)
+ if (m_hijacking_listeners.size() > 0 && event_type & m_hijacking_masks.back())
return true;
if (m_listeners.empty())
@@ -224,19 +224,22 @@ Broadcaster::PrivateBroadcastEvent (EventSP &event_sp, bool unique)
m_broadcaster_name.AsCString(""),
event_description.GetData(),
unique,
- m_hijacking_listener);
+ m_hijacking_listeners.back());
}
- if (m_hijacking_listener != NULL && m_hijacking_mask & event_type)
+ if (m_hijacking_listeners.size() > 0 && m_hijacking_masks.back() & event_type)
{
+ Listener *hijacking_listener = m_hijacking_listeners.back();
// FIXME: REMOVE THIS EXTRA LOGGING
LogSP log_process(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_PROCESS));
if (log_process)
- log_process->Printf ("Hijacking event delivery for Broadcaster(\"%s\").", m_broadcaster_name.AsCString(""));
+ log_process->Printf ("Hijacking event delivery for Broadcaster(\"%s\") to Listener(\"%s\").",
+ m_broadcaster_name.AsCString(""),
+ hijacking_listener->GetName());
- if (unique && m_hijacking_listener->PeekAtNextEventForBroadcasterWithType (this, event_type))
+ if (unique && hijacking_listener->PeekAtNextEventForBroadcasterWithType (this, event_type))
return;
- m_hijacking_listener->AddEvent (event_sp);
+ hijacking_listener->AddEvent (event_sp);
}
else
{
@@ -276,13 +279,9 @@ bool
Broadcaster::HijackBroadcaster (Listener *listener, uint32_t event_mask)
{
Mutex::Locker event_types_locker(m_listeners_mutex);
- assert (m_hijacking_listener == NULL);
- if (m_hijacking_listener != NULL)
- return false;
-
- m_hijacking_listener = listener;
- m_hijacking_mask = event_mask;
+ m_hijacking_listeners.push_back(listener);
+ m_hijacking_masks.push_back(event_mask);
return true;
}
@@ -290,7 +289,7 @@ void
Broadcaster::RestoreBroadcaster ()
{
Mutex::Locker event_types_locker(m_listeners_mutex);
- m_hijacking_listener = NULL;
- m_hijacking_mask = 0;
+ m_hijacking_listeners.pop_back();
+ m_hijacking_masks.pop_back();
}
OpenPOWER on IntegriCloud