From 8bfd80e5a2bef03ec333884eb999fbd492cd659e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 20 Jul 2009 19:04:09 +0200 Subject: pulsesink: don't wait for posted message We can't wait for the ENTER/LEAVE messages to be be posted because the base class sometimes calls the start method with the object lock, which would block the message posting. Instead, just assume that the message will be posted soon and continue. We'll have to fix this in the base class. --- ext/pulse/pulsesink.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'ext') diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index 88efa34f..5373cdd3 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -859,6 +859,7 @@ mainloop_enter_defer_cb (pa_mainloop_api * api, void *userdata) message = gst_message_new_stream_status (GST_OBJECT (pulsesink), GST_STREAM_STATUS_TYPE_ENTER, GST_ELEMENT (pulsesink)); gst_message_set_stream_status_object (message, &val); + gst_element_post_message (GST_ELEMENT (pulsesink), message); /* signal the waiter */ @@ -883,9 +884,6 @@ gst_pulseringbuffer_start (GstRingBuffer * buf) pa_mainloop_api_once (pa_threaded_mainloop_get_api (psink->mainloop), mainloop_enter_defer_cb, psink); - while (psink->pa_defer_ran == FALSE) - pa_threaded_mainloop_wait (psink->mainloop); - GST_DEBUG_OBJECT (psink, "starting"); pbuf->paused = FALSE; gst_pulsering_set_corked (pbuf, FALSE, FALSE); @@ -988,9 +986,6 @@ cleanup: mainloop_leave_defer_cb, psink); GST_DEBUG_OBJECT (psink, "waiting for stream status"); - while (psink->pa_defer_ran == FALSE) - pa_threaded_mainloop_wait (psink->mainloop); - pa_threaded_mainloop_unlock (psink->mainloop); return res; -- cgit