[gst-devel] eos waiting on preroll?

S Boucher stbya at yahoo.com
Fri Mar 19 22:29:20 CET 2010


I have an audio pipeline.

The entire pipeline has reached the PLAYING state.

The source has pushed data via the pad task.

The application thread then decides to change the state from PLAYING to READY.

At about the same time, the source's pad task is pushing an eos event.

Result: deadlock.

Suggestion appreciated. :-(


Pad task thread blocked:
------------------------

GstFlowReturn
gst_base_sink_wait_eos (GstBaseSink * sink, GstClockTime time,
    GstClockTimeDiff * jitter)
{
  GstClockReturn status;
  GstFlowReturn ret;

  do {
    GstClockTime stime;

    GST_DEBUG_OBJECT (sink, "checking preroll");

    /* first wait for the playing state before we can continue */
    if (G_UNLIKELY (sink->need_preroll)) {
>>>      ret = gst_base_sink_wait_preroll (sink);          <<<< HERE
      if (ret != GST_FLOW_OK)
        goto flushing;
    }

#0  0xb7fe1430 in __kernel_vsyscall ()
#1  0xb7f8a0e5 in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:122
#2  0xb7e6b644 in gst_base_sink_wait_preroll (sink=0x86dc618) at gstbasesink.c:1734
#3  0xb7e6c1eb in gst_base_sink_wait_eos (sink=0x86dc618, time=1776417233, jitter=0x0) at gstbasesink.c:1839
#4  0xb5c1daa7 in gst_base_audio_sink_drain (sink=0x86dc618) at gstbaseaudiosink.c:731
#5  0xb5c1dc19 in gst_base_audio_sink_event (bsink=0x86dc618, event=0x86fcf90) at gstbaseaudiosink.c:758
#6  0xb5bbb4ee in gst_pulsesink_event (sink=0x86dc618, event=0x86fcf90) at pulsesink.c:1183
#7  0xb7e70021 in gst_base_sink_render_object (basesink=0x86dc618, pad=0x884ca88, obj=0x86fcf90) at gstbasesink.c:2379
#8  0xb7e71aa8 in gst_base_sink_queue_object_unlocked (basesink=0x86dc618, pad=0x884ca88, obj=0x86fcf90, prerollable=1) at gstbasesink.c:2566
#9  0xb7e7301f in gst_base_sink_event (pad=0x884ca88, event=0x86fcf90) at gstbasesink.c:2719
...
#40 0xb7def36d in gst_proxy_pad_do_event (pad=0x86b2380, event=0x86fcf90) at gstghostpad.c:126
#41 0xb7df98ac in gst_pad_send_event (pad=0x86b2380, event=0x86fcf90) at gstpad.c:4634
#42 0xb7dfa015 in gst_pad_push_event (pad=0x884cb48, event=0x86fcf90) at gstpad.c:4490
#43 0xb7de1eff in gst_element_default_send_event (element=0x86a62c0, event=0x86fcf90) at gstelement.c:1343
#44 0xb7de3eb3 in gst_element_send_event (element=0x86a62c0, event=0x86fcf90) at gstelement.c:1383
...


Application thread:
-------------------

#0  0xb7fe1430 in __kernel_vsyscall ()
#1  0xb7f8ccf9 in __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/lowlevellock.S:136
#2  0xb7f88129 in _L_lock_89 () from /lib/tls/i686/cmov/libpthread.so.0
#3  0xb7f87a32 in __pthread_mutex_lock (mutex=0x875d804) at pthread_mutex_lock.c:86
#4  0xb7bd4701 in IA__g_static_rec_mutex_lock (mutex=0x875d800) at /build/buildd/glib2.0-2.20.1/glib/gthread.c:313
#5  0xb7dd40a4 in gst_bin_element_set_state (element=0x86a54d8, transition=GST_STATE_CHANGE_PLAYING_TO_PAUSED) at gstbin.c:2004
#6  gst_bin_change_state_func (element=0x86a54d8, transition=GST_STATE_CHANGE_PLAYING_TO_PAUSED) at gstbin.c:2348
#7  0xb7e05f9a in gst_pipeline_change_state (element=0x86a54d8, transition=GST_STATE_CHANGE_PLAYING_TO_PAUSED) at gstpipeline.c:465
#8  0xb7de32c8 in gst_element_change_state (element=0x86a54d8, transition=GST_STATE_CHANGE_PLAYING_TO_PAUSED) at gstelement.c:2427
#9  0xb7de622c in gst_element_set_state_func (element=0x86a54d8, state=GST_STATE_READY) at gstelement.c:2377
#10 0xb7de24f2 in gst_element_set_state (element=0x86a54d8, state=GST_STATE_READY) at gstelement.c:2280
#11 0x08060eaf in pipeline_set_state (_media=0x883f100, new_state=GST_STATE_READY) at src/gst_media.c:383
...



      __________________________________________________________________
Yahoo! Canada Toolbar: Search from anywhere on the web, and bookmark your favourite sites. Download it now
http://ca.toolbar.yahoo.com.




More information about the gstreamer-devel mailing list