diff options
author | Max Kellermann <max@duempel.org> | 2008-04-12 04:14:25 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-04-12 04:14:25 +0000 |
commit | 0146fbe3ceab96759f1e55e73daaa6d6d7bc4b9b (patch) | |
tree | 88d4b8a9d3d7014b9bb0763d7b86c08a19695307 /src/notify.h | |
parent | 38e0dafc4c1e71a5ff7a9d9563d80b096945f97b (diff) | |
download | mpd-0146fbe3ceab96759f1e55e73daaa6d6d7bc4b9b.tar.gz mpd-0146fbe3ceab96759f1e55e73daaa6d6d7bc4b9b.tar.xz mpd-0146fbe3ceab96759f1e55e73daaa6d6d7bc4b9b.zip |
use the pthread API in notify.c
This patch rewrites notify.c to use the pthread API, namely
pthread_mutex and pthread_cond. This is a lot cheaper and easier than
the pipe() hack.
git-svn-id: https://svn.musicpd.org/mpd/trunk@7280 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/notify.h')
-rw-r--r-- | src/notify.h | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/src/notify.h b/src/notify.h index 9f1a1961b..f79518f8f 100644 --- a/src/notify.h +++ b/src/notify.h @@ -19,29 +19,42 @@ #ifndef NOTIFY_H #define NOTIFY_H -/* - * This library implements inter-process signalling using blocking - * read() on an anonymous pipe. As a side effect, the read() system - * call has the same signal interruption behaviour as the old sleep - * function. - * - * As soon as mpd uses threading instead of fork()/shm, we can replace - * this library with a pthread_cond object. - * - * This code is experimental and carries a lot of overhead. Still, it - * uses less resources than the old polling code with a fixed sleep - * time. - * - */ +#include "os_compat.h" typedef struct _Notify { - int fds[2]; + pthread_mutex_t mutex; + pthread_cond_t cond; + int pending; } Notify; -void notifyInit(Notify *notify); +int notifyInit(Notify *notify); + +/** + * The thread which shall be notified by this object must call this + * function before any notifyWait() invocation. It locks the mutex. + */ +void notifyEnter(Notify *notify); + +/** + * Neutralize notifyLeave(). + */ +void notifyLeave(Notify *notify); +/** + * Wait for a notification. Return immediately if we have already + * been notified since we last returned from notifyWait(). + */ void notifyWait(Notify *notify); +/** + * Notify the thread. This function never blocks. + */ void notifySignal(Notify *notify); +/** + * Notify the thread synchonously, i.e. wait until it has received the + * notification. + */ +void notifySignalSync(Notify *notify); + #endif |