From 2dcf052e13cfdd5e51e010ea855a84877a06db65 Mon Sep 17 00:00:00 2001 From: Mitchell Fang Date: Wed, 22 May 2013 11:23:27 +0300 Subject: [PATCH] thread-mainloop: Fix bug in example code Checking the operation state caused a deadlock, because the state won't change before my_drain_callback() returns, and it doesn't return before my_drain_stream_func() calls pa_threaded_mainloop_accept(). --- src/pulse/thread-mainloop.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pulse/thread-mainloop.h b/src/pulse/thread-mainloop.h index ff166f8..3437001 100644 --- a/src/pulse/thread-mainloop.h +++ b/src/pulse/thread-mainloop.h @@ -166,7 +166,7 @@ PA_C_DECL_BEGIN * access this data safely, we must extend our example a bit: * * \code - * static int *drain_result; + * static volatile int *drain_result = NULL; * * static void my_drain_callback(pa_stream*s, int success, void *userdata) { * pa_threaded_mainloop *m; @@ -187,7 +187,7 @@ PA_C_DECL_BEGIN * o = pa_stream_drain(s, my_drain_callback, m); * assert(o); * - * while (pa_operation_get_state(o) == PA_OPERATION_RUNNING) + * while (drain_result == NULL) * pa_threaded_mainloop_wait(m); * * pa_operation_unref(o); -- 2.7.4