DefaultNotificationService:
* Added Lock()/Unlock() for explicit locking by a service user. * Added NotifyLocked() and made Notify() inline. * Added HasListeners() so one can check whether there is a listener at all before preparing the event message. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34736 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -131,8 +131,18 @@ public:
|
|||||||
DefaultNotificationService(const char* name);
|
DefaultNotificationService(const char* name);
|
||||||
virtual ~DefaultNotificationService();
|
virtual ~DefaultNotificationService();
|
||||||
|
|
||||||
void Notify(const KMessage& event, uint32 eventMask);
|
inline bool Lock()
|
||||||
|
{ return recursive_lock_lock(&fLock)
|
||||||
|
== B_OK; }
|
||||||
|
inline void Unlock()
|
||||||
|
{ recursive_lock_unlock(&fLock); }
|
||||||
|
|
||||||
|
inline void Notify(const KMessage& event, uint32 eventMask);
|
||||||
|
void NotifyLocked(const KMessage& event,
|
||||||
|
uint32 eventMask);
|
||||||
|
|
||||||
|
inline bool HasListeners() const
|
||||||
|
{ return !fListeners.IsEmpty(); }
|
||||||
virtual status_t AddListener(const KMessage* eventSpecifier,
|
virtual status_t AddListener(const KMessage* eventSpecifier,
|
||||||
NotificationListener& listener);
|
NotificationListener& listener);
|
||||||
virtual status_t UpdateListener(const KMessage* eventSpecifier,
|
virtual status_t UpdateListener(const KMessage* eventSpecifier,
|
||||||
@@ -238,6 +248,15 @@ private:
|
|||||||
ServiceHash fServiceHash;
|
ServiceHash fServiceHash;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DefaultNotificationService::Notify(const KMessage& event, uint32 eventMask)
|
||||||
|
{
|
||||||
|
RecursiveLocker _(fLock);
|
||||||
|
NotifyLocked(event, eventMask);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
@@ -173,10 +173,8 @@ DefaultNotificationService::~DefaultNotificationService()
|
|||||||
common bit with this mask will receive the event.
|
common bit with this mask will receive the event.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
DefaultNotificationService::Notify(const KMessage& event, uint32 eventMask)
|
DefaultNotificationService::NotifyLocked(const KMessage& event, uint32 eventMask)
|
||||||
{
|
{
|
||||||
RecursiveLocker _(fLock);
|
|
||||||
|
|
||||||
// Note: The following iterations support that the listener removes itself
|
// Note: The following iterations support that the listener removes itself
|
||||||
// in the hook method. That's a property of the DoublyLinkedList iterator.
|
// in the hook method. That's a property of the DoublyLinkedList iterator.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user