bool Listener::StopListeningForEventSpec (BroadcasterManager &manager, const BroadcastEventSpec &event_spec) { Mutex::Locker locker(m_broadcasters_mutex); return manager.UnregisterListenerForEvents (*this, event_spec); }
uint32_t Listener::StartListeningForEventSpec (BroadcasterManager &manager, const BroadcastEventSpec &event_spec) { Mutex::Locker locker(m_broadcasters_mutex); uint32_t bits_acquired = manager.RegisterListenerForEvents(*this, event_spec); if (bits_acquired) m_broadcaster_managers.push_back(&manager); return bits_acquired; }
uint32_t Listener::StartListeningForEventSpec (BroadcasterManager &manager, const BroadcastEventSpec &event_spec) { // The BroadcasterManager mutex must be locked before m_broadcasters_mutex // to avoid violating the lock hierarchy (manager before broadcasters). Mutex::Locker manager_locker(manager.m_manager_mutex); Mutex::Locker locker(m_broadcasters_mutex); uint32_t bits_acquired = manager.RegisterListenerForEvents(*this, event_spec); if (bits_acquired) m_broadcaster_managers.push_back(&manager); return bits_acquired; }