static void thread_func2(void *k) { int fd; fail_unless((fd = pa_autospawn_lock_init()) >= 0); pa_log("%i, Trying to acquire lock.", PA_PTR_TO_INT(k)); for (;;) { struct pollfd pollfd; int j; if ((j = pa_autospawn_lock_acquire(false)) > 0) break; fail_unless(j == 0); memset(&pollfd, 0, sizeof(pollfd)); pollfd.fd = fd; pollfd.events = POLLIN; fail_unless(pa_poll(&pollfd, 1, -1) == 1); pa_log("%i, woke up", PA_PTR_TO_INT(k)); } pa_log("%i, Got the lock!, Sleeping for 5s", PA_PTR_TO_INT(k)); pa_msleep(5000); pa_log("%i, Releasing", PA_PTR_TO_INT(k)); pa_autospawn_lock_release(); pa_autospawn_lock_done(false); }
static int sink_process_msg( pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) { struct userdata *u = PA_SINK(o)->userdata; switch (code) { case PA_SINK_MESSAGE_SET_STATE: pa_log("mesg set state"); if (PA_PTR_TO_INT(data) == PA_SINK_RUNNING) u->timestamp = pa_rtclock_now(); break; case PA_SINK_MESSAGE_GET_LATENCY: { pa_usec_t now; pa_log("mesg get latency"); now = pa_rtclock_now(); *((pa_usec_t*)data) = u->timestamp > now ? u->timestamp - now : 0; return 0; } } pa_log("sink message: %u", code); return pa_sink_process_msg(o, code, data, offset, chunk); }
static void thread_func(void*k) { fail_unless(pa_autospawn_lock_init() >= 0); pa_log("%i, Trying to acquire lock.", PA_PTR_TO_INT(k)); fail_unless(pa_autospawn_lock_acquire(true) > 0); pa_log("%i, Got the lock!, Sleeping for 5s", PA_PTR_TO_INT(k)); pa_msleep(5000); pa_log("%i, Releasing", PA_PTR_TO_INT(k)); pa_autospawn_lock_release(); pa_autospawn_lock_done(false); }