pulsesink: don't wait for posted message
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 20 Jul 2009 17:04:09 +0000 (19:04 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 20 Jul 2009 17:07:19 +0000 (19:07 +0200)
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

index 88efa34f741ea7b5333644b263ceeea3bf7291f5..5373cdd37bcbdc68f7175048a40c3ae186cec494 100644 (file)
@@ -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;