notify: use GLib locking
Use GLib locking (GMutex, GCond) instead of pthread because GLib is more portable, e.g. on mingw32.
This commit is contained in:
parent
e8c44782d0
commit
ed9668f638
29
src/notify.c
29
src/notify.c
|
@ -17,42 +17,33 @@
|
|||
*/
|
||||
|
||||
#include "notify.h"
|
||||
#include "log.h"
|
||||
|
||||
void notify_init(struct notify *notify)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pthread_mutex_init(¬ify->mutex, NULL);
|
||||
if (ret != 0)
|
||||
FATAL("pthread_mutex_init() failed");
|
||||
|
||||
ret = pthread_cond_init(¬ify->cond, NULL);
|
||||
if (ret != 0)
|
||||
FATAL("pthread_mutex_init() failed");
|
||||
|
||||
notify->mutex = g_mutex_new();
|
||||
notify->cond = g_cond_new();
|
||||
notify->pending = false;
|
||||
}
|
||||
|
||||
void notify_deinit(struct notify *notify)
|
||||
{
|
||||
pthread_mutex_destroy(¬ify->mutex);
|
||||
pthread_cond_destroy(¬ify->cond);
|
||||
g_mutex_free(notify->mutex);
|
||||
g_cond_free(notify->cond);
|
||||
}
|
||||
|
||||
void notify_wait(struct notify *notify)
|
||||
{
|
||||
pthread_mutex_lock(¬ify->mutex);
|
||||
g_mutex_lock(notify->mutex);
|
||||
while (!notify->pending)
|
||||
pthread_cond_wait(¬ify->cond, ¬ify->mutex);
|
||||
g_cond_wait(notify->cond, notify->mutex);
|
||||
notify->pending = false;
|
||||
pthread_mutex_unlock(¬ify->mutex);
|
||||
g_mutex_unlock(notify->mutex);
|
||||
}
|
||||
|
||||
void notify_signal(struct notify *notify)
|
||||
{
|
||||
pthread_mutex_lock(¬ify->mutex);
|
||||
g_mutex_lock(notify->mutex);
|
||||
notify->pending = true;
|
||||
pthread_cond_signal(¬ify->cond);
|
||||
pthread_mutex_unlock(¬ify->mutex);
|
||||
g_cond_signal(notify->cond);
|
||||
g_mutex_unlock(notify->mutex);
|
||||
}
|
||||
|
|
12
src/notify.h
12
src/notify.h
|
@ -19,20 +19,16 @@
|
|||
#ifndef MPD_NOTIFY_H
|
||||
#define MPD_NOTIFY_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <pthread.h>
|
||||
|
||||
struct notify {
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
GMutex *mutex;
|
||||
GCond *cond;
|
||||
bool pending;
|
||||
};
|
||||
|
||||
#define NOTIFY_INITIALIZER { \
|
||||
.mutex = PTHREAD_MUTEX_INITIALIZER, \
|
||||
.cond = PTHREAD_COND_INITIALIZER, \
|
||||
}
|
||||
|
||||
void notify_init(struct notify *notify);
|
||||
|
||||
void notify_deinit(struct notify *notify);
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "pcm_utils.h"
|
||||
#include "notify.h"
|
||||
|
||||
#include <pthread.h>
|
||||
#include <time.h>
|
||||
|
||||
struct audio_output {
|
||||
|
|
Loading…
Reference in New Issue