[Bug 646811] New: baseparse: deadlock in gst_base_parse_set_index

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Tue Apr 5 06:21:58 PDT 2011


https://bugzilla.gnome.org/show_bug.cgi?id=646811
  GStreamer | gst-plugins-bad | git

           Summary: baseparse: deadlock in gst_base_parse_set_index
    Classification: Platform
           Product: GStreamer
           Version: git
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: philipj at opera.com
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


Opera is using a memindex on decodebin2 to have that be populated by
matroskademux, allowing us to map bytes to time and vice versa with help from
the seek index. This has exposed a deadlock in the new baseparse in
gst-plugins-bad.

Input: http://www.nch.com.au/acm/8kmp38.wav

gst_base_parse_set_index takes the object lock and then calls
gst_index_get_writer_id. The default resolver, GST_INDEX_RESOLVER_PATH, will
use gst_object_get_path_string which also tries to take the object lock. Since
it's a GMutex which is not recursive, it will simply deadlock.

Backtrace:

#0 __lll_lock_wait () at
../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:136 
 #1 0x00007ffff6aad5b4 in _L_lock_944 () from
/lib/x86_64-linux-gnu/libpthread.so.0 
 #2 0x00007ffff6aad3ca in __pthread_mutex_lock (mutex=0x4f99420) at
pthread_mutex_lock.c:61 
 #3 0x00007fffecc294be in gst_object_get_parent (object=0x4f04890) at
gstobject.c:893 
 #4 0x00007fffecc29d32 in gst_object_get_path_string (object=0x4f04890) at
gstobject.c:1143 
 #5 0x00007fffecc57b4f in gst_index_path_resolver (index=0x4fada80,
writer=0x4f04890, writer_string=0x7fffe9919318, data=0x0) at gstindex.c:650 
 #6 0x00007fffecc57ea4 in gst_index_get_writer_id (index=0x4fada80,
writer=0x4f04890, id=0x4f04e98) at gstindex.c:724 
 #7 0x00007fffe8caea54 in gst_base_parse_set_index (element=0x4f04890,
index=0x4fada80) at gstbaseparse.c:3652 
 #8 0x00007fffecc4672a in gst_element_set_index (element=0x4f04890,
index=0x4fada80) at gstelement.c:657 
 #9 0x00007fffecc2c3cd in gst_bin_add_func (bin=0x4d54020, element=0x4f04890)
at gstbin.c:1104 
 #10 0x00007fffecc2c8b7 in gst_bin_add (bin=0x4d54020, element=0x4f04890) at
gstbin.c:1228 
 #11 0x00007fffeb59d6b2 in connect_pad (dbin=0x4d54020, src=0x5036010,
dpad=0x4e16840, pad=0x3f8cc10, caps=0x7fffe402a800, factories=0x4920f80,
chain=0x4f8eee0) at gstdecodebin2.c:1766 
 #12 0x00007fffeb59c1c8 in analyze_new_pad (dbin=0x4d54020, src=0x5036010,
pad=0x3f8cc10, caps=0x7fffe402a800, chain=0x4f8eee0) at gstdecodebin2.c:1518 
 #13 0x00007fffeb59f23d in pad_added_cb (element=0x5036010, pad=0x3f8cc10,
chain=0x4f8eee0) at gstdecodebin2.c:2130 
 #14 0x00007fffed11e81c in g_closure_invoke (closure=0x42c3b00,
return_value=0x0, n_param_values=2, param_values=0x7fffe404aed0,
invocation_hint=0x7fffe9919840) at
/build/buildd/glib2.0-2.28.5/./gobject/gclosure.c:767 
 #15 0x00007fffed130019 in signal_emit_unlocked_R (node=<value optimized out>,
detail=0, instance=0x5036010, emission_return=0x0,
instance_and_params=0x7fffe404aed0) at
/build/buildd/glib2.0-2.28.5/./gobject/gsignal.c:3252 
 #16 0x00007fffed139258 in g_signal_emit_valist (instance=<value optimized
out>, signal_id=<value optimized out>, detail=<value optimized out>,
var_args=<value optimized out>) at
/build/buildd/glib2.0-2.28.5/./gobject/gsignal.c:2983 
 #17 0x00007fffed13941f in g_signal_emit (instance=<value optimized out>,
signal_id=<value optimized out>, detail=<value optimized out>) at
/build/buildd/glib2.0-2.28.5/./gobject/gsignal.c:3040 
 #18 0x00007fffecc46ca3 in gst_element_add_pad (element=0x5036010,
pad=0x3f8cc10) at gstelement.c:769 
 #19 0x00007fffe9921cf5 in gst_wavparse_add_src_pad (wav=0x5036010, buf=<value
optimized out>) at gstwavparse.c:1799 
 #20 0x00007fffe9922193 in gst_wavparse_stream_data (wav=0x5036010) at
gstwavparse.c:1918 
 #21 0x00007fffe9922fbd in gst_wavparse_loop (pad=0x3f8c610) at
gstwavparse.c:2057 
 #22 0x00007fffecca0c9b in gst_task_func (task=0x4f92040) at gsttask.c:318 
 #23 0x00007fffecca1dee in default_func (tdata=0x5881510, pool=0x499e000) at
gsttaskpool.c:70 
 #24 0x00007fffeed68b16 in g_thread_pool_thread_proxy (data=<value optimized
out>) at /build/buildd/glib2.0-2.28.5/./glib/gthreadpool.c:319 
 #25 0x00007fffeed663e4 in g_thread_create_proxy (data=0x4ffb9c0) at
/build/buildd/glib2.0-2.28.5/./glib/gthread.c:1897 
 #26 0x00007ffff6aaad8c in start_thread (arg=0x7fffe991a700) at
pthread_create.c:304 
 #27 0x00007ffff6055f7d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:112 
 #28 0x0000000000000000 in ?? ()

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list