[gstreamer-bugs] [Bug 561241] New: metadatademux pad activation deadlock

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Mon Nov 17 08:58:54 PST 2008


If you have any questions why you received this email, please see the text at
the end of this email. Replies to this email are NOT read, please see the text
at the end of this email. You can add comments to this bug at:
  http://bugzilla.gnome.org/show_bug.cgi?id=561241

  GStreamer | gst-plugins-bad | Ver: HEAD CVS
           Summary: metadatademux pad activation deadlock
           Product: GStreamer
           Version: HEAD CVS
          Platform: Other
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: alessandro at nnva.org
         QAContact: gstreamer-bugs at lists.sourceforge.net
     GNOME version: Unspecified
   GNOME milestone: Unspecified


I found a bug similar to http://bugzilla.gnome.org/show_bug.cgi?id=560380 in
metadatademux. I'm seeing it frequently running Elisa but I can't isolate it in
a script.

Again the problem is that filesrc is activated in push mode while downstream is
pulling. The source of the problem is in
gstbasemetadata.c:gst_base_metadata_sink_activate

static gboolean
gst_base_metadata_sink_activate (GstPad * pad)
{
  GstBaseMetadata *filter = NULL;
  gboolean ret = TRUE;


  filter = GST_BASE_METADATA (GST_PAD_PARENT (pad));

  if (!gst_pad_check_pull_range (pad) ||
      !gst_pad_activate_pull (filter->sinkpad, TRUE)) {
    /* Fail here ? nothing to be done by now, activate push mode */
    return gst_pad_activate_push (pad, TRUE);
  }

  /* try to base */
  if (filter->state == MT_STATE_NULL) {
    ret = gst_base_metadata_pull_range_parse (filter);
  }

  if (ret) {
    gst_pad_activate_pull (pad, FALSE);
    gst_pad_activate_push (filter->srcpad, FALSE);
    if (!gst_pad_is_active (pad)) {
      ret = gst_pad_activate_push (filter->srcpad, TRUE);
      ret = ret && gst_pad_activate_push (pad, TRUE);
    }
  }

  return ret;

}

It tries to do something like typefind does, but looks really wrong.

Here's the stack trace I get when it deadlocks:

(gdb) thr a a bt

Thread 3 (Thread 0xb53ffb90 (LWP 27986)):
#0  0xb8058430 in __kernel_vsyscall ()
#1  0xb8014d09 in __lll_lock_wait () from /lib/tls/i686/cmov/libpthread.so.0
#2  0xb8010114 in _L_lock_89 () from /lib/tls/i686/cmov/libpthread.so.0
#3  0xb800fa42 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
#4  0xb7a49f73 in IA__g_static_rec_mutex_lock (mutex=0xa5d03c0)
    at /build/buildd/glib2.0-2.18.2/glib/gthread.c:313
#5  0xb69b4573 in gst_pad_send_event (pad=0xac1d590, event=0xa216740)
    at gstpad.c:4673
#6  0xb69b4c55 in gst_pad_push_event (pad=0xac1d4d0, event=0xa216740)
    at gstpad.c:4542
#7  0xb69b5b1b in gst_pad_event_default (pad=0xac1d410, event=0xa216740)
    at gstpad.c:3312
#8  0xb5f195b2 in gst_metadata_demux_sink_event (pad=0xac1d410, 
    event=0xa216740) at gstmetadatademux.c:557
#9  0xb5f2122e in gst_base_metadata_sink_event (pad=0xac1d410, event=0xa216740)
    at gstbasemetadata.c:1556
#10 0xb69b44ec in gst_pad_send_event (pad=0xac1d410, event=0xa216740)
    at gstpad.c:4686
#11 0xb69b4c55 in gst_pad_push_event (pad=0xac1d350, event=0xa216740)
    at gstpad.c:4542
#12 0xb5f52cf6 in gst_type_find_element_handle_event (pad=0xac1d290, 
---Type <return> to continue, or q <return> to quit---
    event=0xa216740) at gsttypefindelement.c:550
#13 0xb69b44ec in gst_pad_send_event (pad=0xac1d290, event=0xa216740)
    at gstpad.c:4686
#14 0xb69b4c55 in gst_pad_push_event (pad=0xa5b2060, event=0xa216740)
    at gstpad.c:4542
#15 0xb69a9f8d in gst_proxy_pad_do_event (pad=0xa5b1800, event=0xa216740)
    at gstghostpad.c:123
#16 0xb69b44ec in gst_pad_send_event (pad=0xa5b1800, event=0xa216740)
    at gstpad.c:4686
#17 0xb69b4c55 in gst_pad_push_event (pad=0xac1d110, event=0xa216740)
    at gstpad.c:4542
#18 0xb5f52cf6 in gst_type_find_element_handle_event (pad=0xac1d050, 
    event=0xa216740) at gsttypefindelement.c:550
#19 0xb69b44ec in gst_pad_send_event (pad=0xac1d050, event=0xa216740)
    at gstpad.c:4686
#20 0xb69b4c55 in gst_pad_push_event (pad=0xac1d1d0, event=0xa216740)
    at gstpad.c:4542
#21 0xb6a34364 in gst_base_src_loop (pad=0xac1d1d0) at gstbasesrc.c:2199
#22 0xb69d8983 in gst_task_func (task=0xa557e30, tclass=0xa5afa00)
    at gsttask.c:192
#23 0xb7a4b6c6 in g_thread_pool_thread_proxy (data=0xa5afa90)
    at /build/buildd/glib2.0-2.18.2/glib/gthreadpool.c:265
#24 0xb7a4a02f in g_thread_create_proxy (data=0xb5400880)
---Type <return> to continue, or q <return> to quit---
    at /build/buildd/glib2.0-2.18.2/glib/gthread.c:635
#25 0xb800e50f in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#26 0xb7f5c7ee in clone () from /lib/tls/i686/cmov/libc.so.6

Thread 2 (Thread 0xb5d16b90 (LWP 27985)):
#0  0xb8058430 in __kernel_vsyscall ()
#1  0xb8014d09 in __lll_lock_wait () from /lib/tls/i686/cmov/libpthread.so.0
#2  0xb8010114 in _L_lock_89 () from /lib/tls/i686/cmov/libpthread.so.0
#3  0xb800fa42 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
#4  0xb7a49f73 in IA__g_static_rec_mutex_lock (mutex=0xaa32208)
    at /build/buildd/glib2.0-2.18.2/glib/gthread.c:313
#5  0xb69b7d65 in gst_pad_get_range (pad=0xac1d1d0, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4252
#6  0xb69b848d in gst_pad_pull_range (pad=0xac1d050, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4399
#7  0xb5f52709 in gst_type_find_element_getrange (srcpad=0xac1d110, offset=8, 
    length=4, buffer=0xb5d161c8) at gsttypefindelement.c:717
#8  0xb69b7ea5 in gst_pad_get_range (pad=0xac1d110, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4269
#9  0xb69b848d in gst_pad_pull_range (pad=0xa5b1800, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4399
#10 0xb69a7fe2 in gst_proxy_pad_do_getrange (pad=0xa5b2060, offset=8, size=4, 
    buffer=0xb5d161c8) at gstghostpad.c:200
---Type <return> to continue, or q <return> to quit---
#11 0xb69b7ea5 in gst_pad_get_range (pad=0xa5b2060, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4269
#12 0xb69b848d in gst_pad_pull_range (pad=0xac1d290, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4399
#13 0xb5f52709 in gst_type_find_element_getrange (srcpad=0xac1d350, offset=8, 
    length=4, buffer=0xb5d161c8) at gsttypefindelement.c:717
#14 0xb69b7ea5 in gst_pad_get_range (pad=0xac1d350, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4269
#15 0xb69b848d in gst_pad_pull_range (pad=0xac1d410, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4399
#16 0xb5f22c5a in gst_base_metadata_get_range (pad=0xac1d4d0, offset=8, 
    size=4, buf=0xb5d161c8) at gstbasemetadata.c:1622
#17 0xb69b7ea5 in gst_pad_get_range (pad=0xac1d4d0, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4269
#18 0xb69b848d in gst_pad_pull_range (pad=0xac1d590, offset=8, size=4, 
    buffer=0xb5d161c8) at gstpad.c:4399
#19 0xb679fbe9 in user_read_data (png_ptr=0xa5d2800, 
    data=0xb5d16288 "`:!\n�/z��\n]\n", length=4) at gstpngdec.c:311
#20 0xb6ead7e2 in ?? () from /usr/lib/libpng12.so.0
#21 0xb6eac01a in png_read_info () from /usr/lib/libpng12.so.0
#22 0xb679f9fa in gst_pngdec_task (pad=0xac1d590) at gstpngdec.c:470
#23 0xb69d8983 in gst_task_func (task=0xa557e80, tclass=0xa5afa00)
    at gsttask.c:192
---Type <return> to continue, or q <return> to quit---
#24 0xb7a4b6c6 in g_thread_pool_thread_proxy (data=0xa5afa90)
    at /build/buildd/glib2.0-2.18.2/glib/gthreadpool.c:265
#25 0xb7a4a02f in g_thread_create_proxy (data=0xa5d0ab8)
    at /build/buildd/glib2.0-2.18.2/glib/gthread.c:635
#26 0xb800e50f in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#27 0xb7f5c7ee in clone () from /lib/tls/i686/cmov/libc.so.6

Thread 1 (Thread 0xb7e7a8c0 (LWP 27977)):
#0  0xb8058430 in __kernel_vsyscall ()
#1  0xb8014d09 in __lll_lock_wait () from /lib/tls/i686/cmov/libpthread.so.0
#2  0xb8010114 in _L_lock_89 () from /lib/tls/i686/cmov/libpthread.so.0
#3  0xb800fa42 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
#4  0xb7a49f73 in IA__g_static_rec_mutex_lock (mutex=0xa5caaa8)
    at /build/buildd/glib2.0-2.18.2/glib/gthread.c:313
#5  0xb69b2bf8 in post_activate (pad=0xac1d4d0, new_mode=173845164)
    at gstpad.c:613
#6  0xb69bcca9 in gst_pad_activate_push (pad=0xac1d4d0, active=0)
    at gstpad.c:909
#7  0xb69bd5d0 in gst_pad_activate_pull (pad=0xac1d4d0, active=0)
    at gstpad.c:753
#8  0xb69bd353 in gst_pad_activate_pull (pad=0xac1d590, active=0)
    at gstpad.c:766
#9  0xb69bdac5 in gst_pad_set_active (pad=0xac1d590, active=0) at gstpad.c:675
---Type <return> to continue, or q <return> to quit---
#10 0xb69a207b in activate_pads (pad=0xac1d590, ret=0xbf856e78, 
    active=0xbf856ed8) at gstelement.c:2511
#11 0xb69af137 in gst_iterator_fold (it=0xa5ea740, 
    func=0xb69a2050 <activate_pads>, ret=0xbf856e78, user_data=0xbf856ed8)
    at gstiterator.c:540
#12 0xb69a1aff in iterator_activate_fold_with_resync (iter=0xa5ea740, 
    func=0xb69a2050 <activate_pads>, user_data=0xbf856ed8) at gstelement.c:2543
#13 0xb69a1c3d in gst_element_pads_activate (element=0xa5d1000, active=0)
    at gstelement.c:2587
#14 0xb69a1fc9 in gst_element_change_state_func (element=0xa5d1000, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstelement.c:2665
#15 0xb679e43c in gst_pngdec_change_state (element=0xa5d1000, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstpngdec.c:789
#16 0xb699e0b8 in gst_element_change_state (element=0xa5d1000, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstelement.c:2427
#17 0xb69a0ffc in gst_element_set_state_func (element=0xa5d1000, 
    state=GST_STATE_READY) at gstelement.c:2377
#18 0xb699d2e2 in gst_element_set_state (element=0xa5d1000, 
    state=GST_STATE_READY) at gstelement.c:2280
#19 0xb698e64a in gst_bin_change_state_func (element=0xac14108, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstbin.c:1974
#20 0xb5f7e43e in gst_decode_bin_change_state (element=0xac14108, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstdecodebin2.c:2422
---Type <return> to continue, or q <return> to quit---
#21 0xb699e0b8 in gst_element_change_state (element=0xac14108, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstelement.c:2427
#22 0xb69a0ffc in gst_element_set_state_func (element=0xac14108, 
    state=GST_STATE_READY) at gstelement.c:2377
#23 0xb699d2e2 in gst_element_set_state (element=0xac14108, 
    state=GST_STATE_READY) at gstelement.c:2280
#24 0xb698e64a in gst_bin_change_state_func (element=0xac14008, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstbin.c:1974
#25 0xb69c0c3a in gst_pipeline_change_state (element=0xac14008, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstpipeline.c:465
#26 0xb699e0b8 in gst_element_change_state (element=0xac14008, 
    transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstelement.c:2427
#27 0xb69a0ffc in gst_element_set_state_func (element=0xac14008, 
    state=GST_STATE_READY) at gstelement.c:2377
#28 0xb699d2e2 in gst_element_set_state (element=0xac14008, 
    state=GST_STATE_READY) at gstelement.c:2280
#29 0xb6ab33be in _wrap_gst_element_set_state (self=0xabd7324, args=0xabd648c, 
    kwargs=0x0) at gstelement.override:71
#30 0x080cea39 in PyEval_EvalFrameEx (f=0xac139ec, throwflag=0)
    at ../Python/ceval.c:3595
#31 0x080d0345 in PyEval_EvalCodeEx (co=0xa98bde8, globals=0xa73db54, 
    locals=0x0, args=0xac12668, argcount=1, kws=0xac1266c, kwcount=0, 
    defs=0xa745ab8, defcount=1, closure=0x0) at ../Python/ceval.c:2858
---Type <return> to continue, or q <return> to quit---
#32 0x080ce728 in PyEval_EvalFrameEx (f=0xac1252c, throwflag=0)
    at ../Python/ceval.c:3691
#33 0x080cfbf5 in PyEval_EvalFrameEx (f=0xa5ec4ac, throwflag=0)
    at ../Python/ceval.c:3681
#34 0x080cfbf5 in PyEval_EvalFrameEx (f=0xa5ec1dc, throwflag=0)
    at ../Python/ceval.c:3681
#35 0x080d0345 in PyEval_EvalCodeEx (co=0xa7499b0, globals=0xa73db54, 
    locals=0x0, args=0xabd6278, argcount=1, kws=0xad420c8, kwcount=0, 
    defs=0xa745ad8, defcount=1, closure=0x0) at ../Python/ceval.c:2858
#36 0x0811797e in function_call (func=0xa74e6bc, arg=0xabd626c, kw=0xabcd8ac)
    at ../Objects/funcobject.c:517
#37 0x0805d867 in PyObject_Call (func=0x80, arg=0xabd626c, kw=0xabcd8ac)
    at ../Objects/abstract.c:1861
#38 0x080cd502 in PyEval_EvalFrameEx (f=0xaa33854, throwflag=0)
    at ../Python/ceval.c:3875
#39 0x080cfbf5 in PyEval_EvalFrameEx (f=0xaa330cc, throwflag=0)
    at ../Python/ceval.c:3681
#40 0x080d0345 in PyEval_EvalCodeEx (co=0xb7d9be78, globals=0xb7d9a2d4, 
    locals=0x0, args=0xabd6578, argcount=1, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:2858
#41 0x08117891 in function_call (func=0xa3837d4, arg=0xabd656c, kw=0x0)
    at ../Objects/funcobject.c:517
#42 0x0805d867 in PyObject_Call (func=0x80, arg=0xabd656c, kw=0x0)
---Type <return> to continue, or q <return> to quit---
    at ../Objects/abstract.c:1861
#43 0x08063a7a in instancemethod_call (func=0xa3837d4, arg=0xabd656c, kw=0x0)
    at ../Objects/classobject.c:2519
#44 0x0805d867 in PyObject_Call (func=0x80, arg=0xb7e3a02c, kw=0x0)
    at ../Objects/abstract.c:1861
#45 0x080c850c in PyEval_CallObjectWithKeywords (func=0xa97816c, 
    arg=0xb7e3a02c, kw=0x0) at ../Python/ceval.c:3464
#46 0x0805d9f0 in PyObject_CallObject (o=0xa97816c, a=0xb7e3a02c)
    at ../Objects/abstract.c:1852
#47 0xb7d46e97 in _pyglib_handler_marshal (user_data=0xab9d3ac)
    at /build/buildd/pygobject-2.15.3/glib/pyglib.c:557
#48 0xb7a1fe26 in g_timeout_dispatch (source=0xad42080, callback=0xfffffe00, 
    user_data=0xab9d3ac) at /build/buildd/glib2.0-2.18.2/glib/gmain.c:3589
#49 0xb7a1f6f8 in IA__g_main_context_dispatch (context=0xa3a7540)
    at /build/buildd/glib2.0-2.18.2/glib/gmain.c:2144
#50 0xb7a22da3 in g_main_context_iterate (context=0xa3a7540, block=1, 
    dispatch=1, self=0xa21e080)
    at /build/buildd/glib2.0-2.18.2/glib/gmain.c:2778
#51 0xb7a232c2 in IA__g_main_loop_run (loop=0xaa0e6b0)
    at /build/buildd/glib2.0-2.18.2/glib/gmain.c:2986
#52 0xb742f3a9 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#53 0xb7810f1c in ?? ()
   from /var/lib/python-support/python2.5/gtk-2.0/gtk/_gtk.so
---Type <return> to continue, or q <return> to quit---
#54 0x080cede3 in PyEval_EvalFrameEx (f=0xaa3225c, throwflag=0)
    at ../Python/ceval.c:3579
#55 0x080d0345 in PyEval_EvalCodeEx (co=0xb7d9bda0, globals=0xb7d9a2d4, 
    locals=0x0, args=0xaa2bf68, argcount=1, kws=0xaa2bf6c, kwcount=0, 
    defs=0xa2ae4d8, defcount=1, closure=0x0) at ../Python/ceval.c:2858
#56 0x080ce728 in PyEval_EvalFrameEx (f=0xaa2be1c, throwflag=0)
    at ../Python/ceval.c:3691
#57 0x080cfbf5 in PyEval_EvalFrameEx (f=0xa17433c, throwflag=0)
    at ../Python/ceval.c:3681
#58 0x080d0345 in PyEval_EvalCodeEx (co=0xb7e08a40, globals=0xb7e53acc, 
    locals=0xb7e53acc, args=0x0, argcount=0, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:2858
#59 0x080d0557 in PyEval_EvalCode (co=0xb7e08a40, globals=0xb7e53acc, 
    locals=0xb7e53acc) at ../Python/ceval.c:514
#60 0x080edf8f in PyRun_FileExFlags (fp=0xa115008, 
    filename=0xbf85a21c
"elisa-plugins/elisa/plugins/gstreamer/get_metadata.py", start=257,
globals=0xb7e53acc, locals=0xb7e53acc, closeit=1, flags=0xbf858fe8)
    at ../Python/pythonrun.c:1273
#61 0x080ee25a in PyRun_SimpleFileExFlags (fp=0xa115008, 
    filename=0xbf85a21c
"elisa-plugins/elisa/plugins/gstreamer/get_metadata.py", closeit=1,
flags=0xbf858fe8) at ../Python/pythonrun.c:879
#62 0x080595e7 in Py_Main (argc=8, argv=0xbf8590b4) at ../Modules/main.c:532
#63 0x08058962 in main (argc=Cannot access memory at address 0x80
) at ../Modules/python.c:23


-- 
See http://bugzilla.gnome.org/page.cgi?id=email.html for more info about why you received
this email, why you can't respond via email, how to stop receiving
emails (or reduce the number you receive), and how to contact someone
if you are having problems with the system.

You can add comments to this bug at http://bugzilla.gnome.org/show_bug.cgi?id=561241.




More information about the Gstreamer-bugs mailing list