After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 333112 - [playbin] shutdown can deadlock with pull-based demuxers
[playbin] shutdown can deadlock with pull-based demuxers
Status: RESOLVED INCOMPLETE
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
: 342412 (view as bug list)
Depends on:
Blocks: 111511
 
 
Reported: 2006-03-02 11:02 UTC by Tim-Philipp Müller
Modified: 2009-01-19 19:58 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Tim-Philipp Müller 2006-03-02 11:02:58 UTC
Using nautilus' audio preview function (play song when hovering over the icon), I can make oggdemux/GStreamer lock up reproducible. Always seems to happen in oggdemux (this is quickly moving the mouse about the nautilus window area; the directory viewed contains only mp3 and ogg/vorbis files).

Here's the stack trace:

(gdb) thread apply all bt

Thread 3 (Thread 1985227696 (LWP 5765))

  • #0 __kernel_vsyscall
  • #1 __lll_mutex_lock_wait
    from /lib/tls/i686/cmov/libpthread.so.0
  • #2 _L_mutex_lock_33
    from /lib/tls/i686/cmov/libpthread.so.0
  • #3 ??
  • #4 g_thread_equal_posix_impl
    at gthread-posix.c line 412
  • #5 IA__g_static_rec_mutex_lock
    at gthread.c line 286
  • #6 new_pad
    at gstdecodebin.c line 1055
  • #7 IA__g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 636
  • #8 IA__g_closure_invoke
    at gclosure.c line 490
  • #9 signal_emit_unlocked_R
    at gsignal.c line 2438
  • #10 IA__g_signal_emit_valist
    at gsignal.c line 2197
  • #11 IA__g_signal_emit
    at gsignal.c line 2241
  • #12 gst_element_add_pad
    at gstelement.c line 634
  • #13 gst_ogg_demux_activate_chain
    at gstoggdemux.c line 1572
  • #14 gst_ogg_demux_perform_seek
    at gstoggdemux.c line 1903
  • #15 gst_ogg_demux_loop
    at gstoggdemux.c line 2551
  • #16 gst_task_func
    at gsttask.c line 193
  • #17 g_thread_pool_thread_proxy
    at gthreadpool.c line 158
  • #18 g_thread_create_proxy
    at gthread.c line 582
  • #19 start_thread
    from /lib/tls/i686/cmov/libpthread.so.0
  • #20 clone
    from /lib/tls/i686/cmov/libc.so.6

Thread 1 (Thread 1993852608 (LWP 5752))

  • #0 __kernel_vsyscall
  • #1 __lll_mutex_lock_wait
    from /lib/tls/i686/cmov/libpthread.so.0
  • #2 _L_mutex_lock_33
    from /lib/tls/i686/cmov/libpthread.so.0
  • #3 ??
  • #4 g_thread_equal_posix_impl
    at gthread-posix.c line 412
  • #5 IA__g_static_rec_mutex_lock
    at gthread.c line 286
  • #6 gst_pad_stop_task
    at gstpad.c line 3911
  • #7 gst_ogg_demux_sink_activate_pull
    at gstoggdemux.c line 2675
  • #8 gst_pad_activate_pull
    at gstpad.c line 720
  • #9 gst_pad_set_active
    at gstpad.c line 647
  • #10 activate_pads
    at gstelement.c line 2250
  • #11 gst_iterator_fold
    at gstiterator.c line 503
  • #12 iterator_fold_with_resync
    at gstelement.c line 2268
  • #13 gst_element_pads_activate
    at gstelement.c line 2305
  • #14 gst_element_change_state_func
    at gstelement.c line 2366
  • #15 gst_ogg_demux_change_state
    at gstoggdemux.c line 2706
  • #16 gst_element_change_state
    at gstelement.c line 2173
  • #17 gst_element_set_state_func
    at gstelement.c line 2135
  • #18 gst_element_set_state
    at gstelement.c line 2045
  • #19 gst_bin_change_state_func
    at gstbin.c line 1710
  • #20 gst_decode_bin_change_state
    at gstdecodebin.c line 1421
  • #21 gst_element_change_state
    at gstelement.c line 2173
  • #22 gst_element_set_state_func
    at gstelement.c line 2135
  • #23 gst_element_set_state
    at gstelement.c line 2045
  • #24 gst_bin_change_state_func
    at gstbin.c line 1710
  • #25 gst_pipeline_change_state
    at gstpipeline.c line 375
  • #26 gst_play_base_bin_change_state
    at gstplaybasebin.c line 1789
  • #27 gst_play_bin_change_state
    at gstplaybin.c line 1321
  • #28 gst_element_change_state
    at gstelement.c line 2173
  • #29 gst_element_set_state_func
    at gstelement.c line 2135
  • #30 gst_element_set_state
    at gstelement.c line 2045
  • #31 fm_directory_view_preview_audio
    at fm-directory-view.c line 9652
  • #32 icon_container_preview_callback
    at fm-icon-view.c line 1733
  • #33 nautilus_marshal_INT__POINTER_BOOLEAN
    at nautilus-marshal-guts.c line 159
  • #34 IA__g_closure_invoke
    at gclosure.c line 490
  • #35 signal_emit_unlocked_R
    at gsignal.c line 2438
  • #36 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #37 IA__g_signal_emit
    at gsignal.c line 2241
  • #38 nautilus_icon_container_emit_preview_signal
    at nautilus-icon-container.c line 6880
  • #39 nautilus_icon_canvas_item_event
    at nautilus-icon-canvas-item.c line 1807
  • #40 eel_marshal_BOOLEAN__BOXED
    from /usr/lib/libeel-2.so.2
  • #41 g_type_class_meta_marshal
    at gclosure.c line 567
  • #42 IA__g_closure_invoke
    at gclosure.c line 490
  • #43 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #44 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #45 IA__g_signal_emit
    at gsignal.c line 2241
  • #46 eel_canvas_window_to_world
    from /usr/lib/libeel-2.so.2
  • #47 eel_canvas_c2w
    from /usr/lib/libeel-2.so.2
  • #48 eel_canvas_c2w
    from /usr/lib/libeel-2.so.2
  • #49 motion_notify_event
    at nautilus-icon-container.c line 3645
  • #50 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 83
  • #51 g_type_class_meta_marshal
    at gclosure.c line 567
  • #52 IA__g_closure_invoke
    at gclosure.c line 490
  • #53 signal_emit_unlocked_R
    at gsignal.c line 2476
  • #54 IA__g_signal_emit_valist
    at gsignal.c line 2207
  • #55 IA__g_signal_emit
    at gsignal.c line 2241
  • #56 gtk_widget_event_internal
    at gtkwidget.c line 3732
  • #57 IA__gtk_propagate_event
    at gtkmain.c line 2198
  • #58 IA__gtk_main_do_event
    at gtkmain.c line 1435
  • #59 gdk_event_dispatch
    at gdkevents-x11.c line 2291
  • #60 IA__g_main_context_dispatch
    at gmain.c line 1916
  • #61 g_main_context_iterate
    at gmain.c line 2547
  • #62 IA__g_main_loop_run
    at gmain.c line 2751
  • #63 IA__gtk_main
    at gtkmain.c line 1014
  • #64 main
    at nautilus-main.c line 442
  • #0 __kernel_vsyscall

Comment 1 Tim-Philipp Müller 2006-03-02 11:05:27 UTC
For the preview patch, see bug #111511 . Nautilus uses a single persistent playbin object, and when starting to play a new song just does this:
  - set to NULL (+ wait)
  - set new URI
  - set to PLAYING
Comment 2 Wim Taymans 2006-03-23 10:28:25 UTC
looks like a deadly embrace between decodebin's lock and the stream lock.
Comment 3 Tim-Philipp Müller 2006-08-22 12:07:23 UTC
Still an issue, just ran into this with totem when switching tracks very quickly.
Comment 4 Tim-Philipp Müller 2006-10-02 13:55:50 UTC
*** Bug 342412 has been marked as a duplicate of this bug. ***
Comment 5 Tim-Philipp Müller 2006-10-02 13:58:28 UTC
Same happens with other demuxers, changing title accordingly. Trace for wavparse:

Thread 4 (Thread -1273447520 (LWP 15304))

  • #0 __kernel_vsyscall
  • #1 __lll_mutex_lock_wait
    from /lib/tls/i686/cmov/libpthread.so.0
  • #2 _L_mutex_lock_49
    from /lib/tls/i686/cmov/libpthread.so.0
  • #3 ??
  • #4 g_thread_equal_posix_impl
    at gthread-posix.c line 415
  • #5 IA__g_static_rec_mutex_lock
    at gthread.c line 257
  • #6 new_pad
    at gstdecodebin.c line 1208
  • #7 IA__g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 636
  • #8 IA__g_closure_invoke
    at gclosure.c line 490
  • #9 signal_emit_unlocked_R
    at gsignal.c line 2438
  • #10 IA__g_signal_emit_valist
    at gsignal.c line 2197
  • #11 IA__g_signal_emit
    at gsignal.c line 2241
  • #12 gst_element_add_pad
    at gstelement.c line 650
  • #13 gst_wavparse_add_src_pad
    at gstwavparse.c line 1412
  • #14 gst_wavparse_stream_data
    at gstwavparse.c line 1477
  • #15 gst_wavparse_loop
    at gstwavparse.c line 1602

Comment 6 Sebastien Bacher 2006-10-03 08:35:40 UTC
Ubuntu bug about that: https://launchpad.net/distros/ubuntu/+source/gst-plugins-base0.10/+bug/45728
Comment 7 mbabej 2006-10-25 13:44:54 UTC
Hello,

i also experience some random crashes when i change tracks quickly or just play around with Play/Pause/Next/Previous buttons. The backtrace can be seen on https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=210315

I think the crashes are related to this bug so i won't open a new GNOME bug on this for now.

Michal
Comment 8 Wim Taymans 2007-04-05 10:37:25 UTC
the random crashes should be fixed with this patch (in -base 0.10.12):
http://webcvs.freedesktop.org/gstreamer/gst-plugins-base/ext/ogg/gstoggdemux.c?r1=1.171&r2=1.172

the deadlock is probably still there.
Comment 9 Christian Neumair 2007-09-02 10:13:55 UTC
Ping. Sorry for my impatience, but this is still blocking GStreamer Nautilus integration.
Comment 10 Sebastian Dröge (slomo) 2008-05-06 09:17:52 UTC
Can someone still reproduce this with latest releases?
Comment 11 Christoph Wurm 2009-01-19 19:58:06 UTC
Closing this bug report as no further information has been provided. Please feel free to reopen this bug if you can provide the information asked for.
Thanks!