1 #include "qemu-common.h"
4 #define AUDIO_CAP "audio-pt"
7 #include "audio_pt_int.h"
9 static void logerr (struct audio_pt *pt, int err, const char *fmt, ...)
14 AUD_vlog (pt->drv, fmt, ap);
18 AUD_log (pt->drv, "Reason: %s\n", strerror (err));
21 int audio_pt_init (struct audio_pt *p, void *(*func) (void *),
22 void *opaque, const char *drv, const char *cap)
29 err = pthread_mutex_init (&p->mutex, NULL);
31 efunc = "pthread_mutex_init";
35 err = pthread_cond_init (&p->cond, NULL);
37 efunc = "pthread_cond_init";
41 err = pthread_create (&p->thread, NULL, func, opaque);
43 efunc = "pthread_create";
50 err2 = pthread_cond_destroy (&p->cond);
52 logerr (p, err2, "%s(%s): pthread_cond_destroy failed", cap, AUDIO_FUNC);
56 err2 = pthread_mutex_destroy (&p->mutex);
58 logerr (p, err2, "%s(%s): pthread_mutex_destroy failed", cap, AUDIO_FUNC);
62 logerr (p, err, "%s(%s): %s failed", cap, AUDIO_FUNC, efunc);
66 int audio_pt_fini (struct audio_pt *p, const char *cap)
70 err = pthread_cond_destroy (&p->cond);
72 logerr (p, err, "%s(%s): pthread_cond_destroy failed", cap, AUDIO_FUNC);
76 err = pthread_mutex_destroy (&p->mutex);
78 logerr (p, err, "%s(%s): pthread_mutex_destroy failed", cap, AUDIO_FUNC);
84 int audio_pt_lock (struct audio_pt *p, const char *cap)
88 err = pthread_mutex_lock (&p->mutex);
90 logerr (p, err, "%s(%s): pthread_mutex_lock failed", cap, AUDIO_FUNC);
96 int audio_pt_unlock (struct audio_pt *p, const char *cap)
100 err = pthread_mutex_unlock (&p->mutex);
102 logerr (p, err, "%s(%s): pthread_mutex_unlock failed", cap, AUDIO_FUNC);
108 int audio_pt_wait (struct audio_pt *p, const char *cap)
112 err = pthread_cond_wait (&p->cond, &p->mutex);
114 logerr (p, err, "%s(%s): pthread_cond_wait failed", cap, AUDIO_FUNC);
120 int audio_pt_unlock_and_signal (struct audio_pt *p, const char *cap)
124 err = pthread_mutex_unlock (&p->mutex);
126 logerr (p, err, "%s(%s): pthread_mutex_unlock failed", cap, AUDIO_FUNC);
129 err = pthread_cond_signal (&p->cond);
131 logerr (p, err, "%s(%s): pthread_cond_signal failed", cap, AUDIO_FUNC);
137 int audio_pt_join (struct audio_pt *p, void **arg, const char *cap)
142 err = pthread_join (p->thread, &ret);
144 logerr (p, err, "%s(%s): pthread_join failed", cap, AUDIO_FUNC);