diff options
| -rw-r--r-- | src/pulse/thread-mainloop.c | 6 | ||||
| -rw-r--r-- | src/pulse/thread-mainloop.h | 3 | ||||
| -rw-r--r-- | src/tests/thread-mainloop-test.c | 13 | 
3 files changed, 16 insertions, 6 deletions
diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c index 0ed54837..29769e2b 100644 --- a/src/pulse/thread-mainloop.c +++ b/src/pulse/thread-mainloop.c @@ -223,3 +223,9 @@ pa_mainloop_api* pa_threaded_mainloop_get_api(pa_threaded_mainloop*m) {      return pa_mainloop_get_api(m->real_mainloop);  } + +int pa_threaded_mainloop_in_thread(pa_threaded_mainloop *m) { +    pa_assert(m); + +    return m->thread && pa_thread_self() == m->thread; +} diff --git a/src/pulse/thread-mainloop.h b/src/pulse/thread-mainloop.h index b78c1583..ea08f72a 100644 --- a/src/pulse/thread-mainloop.h +++ b/src/pulse/thread-mainloop.h @@ -297,6 +297,9 @@ int pa_threaded_mainloop_get_retval(pa_threaded_mainloop *m);  /** Return the abstract main loop abstraction layer vtable for this main loop. */  pa_mainloop_api* pa_threaded_mainloop_get_api(pa_threaded_mainloop*m); +/** Returns non-zero when called from withing the event loop thread. \since 0.9.7 */ +int pa_threaded_mainloop_in_thread(pa_threaded_mainloop *m); +  PA_C_DECL_END  #endif diff --git a/src/tests/thread-mainloop-test.c b/src/tests/thread-mainloop-test.c index 9d0e5de1..be1f1ec2 100644 --- a/src/tests/thread-mainloop-test.c +++ b/src/tests/thread-mainloop-test.c @@ -23,18 +23,19 @@  #include <config.h>  #endif -#include <assert.h>  #include <stdlib.h>  #include <unistd.h>  #include <stdio.h>  #include <pulse/timeval.h>  #include <pulse/util.h> +#include <pulse/thread-mainloop.h>  #include <pulsecore/gccmacro.h> -#include <pulse/thread-mainloop.h> +#include <pulsecore/macro.h>  static void tcb(pa_mainloop_api*a, pa_time_event *e, const struct timeval *tv, void *userdata) { +    pa_assert_se(pa_threaded_mainloop_in_thread(userdata));      fprintf(stderr, "TIME EVENT START\n");      pa_threaded_mainloop_signal(userdata, 1);      fprintf(stderr, "TIME EVENT END\n"); @@ -45,15 +46,15 @@ int main(PA_GCC_UNUSED int argc, PA_GCC_UNUSED char *argv[]) {      pa_threaded_mainloop *m;      struct timeval tv; -    m = pa_threaded_mainloop_new(); -    assert(m); -    a = pa_threaded_mainloop_get_api(m); -    assert(a); +    pa_assert_se(m = pa_threaded_mainloop_new()); +    pa_assert_se(a = pa_threaded_mainloop_get_api(m));      pa_threaded_mainloop_start(m);      pa_threaded_mainloop_lock(m); +    pa_assert_se(!pa_threaded_mainloop_in_thread(m)); +          pa_gettimeofday(&tv);      tv.tv_sec += 5;      a->time_new(a, &tv, tcb, m);  | 
