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 599484 - resindvd: Deadlock from seeking
resindvd: Deadlock from seeking
Status: RESOLVED OBSOLETE
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2009-10-24 13:24 UTC by Jan Schmidt
Modified: 2018-11-03 13:04 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Jan Schmidt 2009-10-24 13:24:24 UTC
Here is a backtrace that can be hit when triggering a seek at the exact moment that resindvdsrc is performing a seamless seek on itself. It boils down to a locking order problem between the stream lock and the state lock:

Thread 8 is attempting to seek (and acquire the state lock) while holding the stream lock. Thread 1 is attempting to acquire the stream lock after sending a flushing seek (and while holding the state lock).

I am not sure of the right way to fix it.

(gdb) thread apply all bt

Thread 1 (Thread 0xb6ce8aa0 (LWP 12583))

  • #0 ??
    from /lib/ld-linux.so.2
  • #1 __lll_lock_wait
    from /lib/tls/i686/cmov/libpthread.so.0
  • #2 _L_lock_89
    from /lib/tls/i686/cmov/libpthread.so.0
  • #3 pthread_mutex_lock
    from /lib/tls/i686/cmov/libpthread.so.0
  • #4 g_static_rec_mutex_lock
    from /usr/lib/libglib-2.0.so.0
  • #5 rsn_base_src_perform_seek
    at rsnbasesrc.c line 970
  • #6 rsn_base_src_send_event
    at rsnbasesrc.c line 1165
  • #7 gst_element_send_event
    at gstelement.c line 1471
  • #8 rsn_dvdsrc_src_event
    at resindvdsrc.c line 1700
  • #9 rsn_base_src_event_handler
    at rsnbasesrc.c line 1270
  • #10 gst_pad_send_event
    at gstpad.c line 5032
  • #11 gst_pad_push_event
    at gstpad.c line 4888
  • #12 gst_flups_demux_src_event
    at gstmpegdemux.c line 1016
  • #13 gst_pad_send_event
    at gstpad.c line 5032
  • #14 gst_pad_push_event
    at gstpad.c line 4888
  • #15 gst_multi_queue_src_event
    at gstmultiqueue.c line 1211
  • #16 gst_pad_send_event
    at gstpad.c line 5032
  • #17 gst_pad_push_event
    at gstpad.c line 4888
  • #18 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #19 gst_pad_send_event
    at gstpad.c line 5032
  • #20 gst_pad_push_event
    at gstpad.c line 4888
  • #21 gst_auto_convert_internal_src_event
    at gstautoconvert.c line 1501
  • #22 gst_pad_send_event
    at gstpad.c line 5032
  • #23 gst_pad_push_event
    at gstpad.c line 4888
  • #24 gst_mpeg2dec_src_event
    at gstmpeg2dec.c line 1811
  • #25 gst_pad_send_event
    at gstpad.c line 5032
  • #26 gst_pad_push_event
    at gstpad.c line 4888
  • #27 gst_auto_convert_src_event
    at gstautoconvert.c line 1331
  • #28 gst_pad_send_event
    at gstpad.c line 5032
  • #29 gst_pad_push_event
    at gstpad.c line 4888
  • #30 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #31 gst_pad_send_event
    at gstpad.c line 5032
  • #32 gst_pad_push_event
    at gstpad.c line 4888
  • #33 gst_pad_event_default
    at gstpad.c line 3439
  • #34 gst_pad_send_event
    at gstpad.c line 5032
  • #35 gst_pad_push_event
    at gstpad.c line 4888
  • #36 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #37 gst_pad_send_event
    at gstpad.c line 5032
  • #38 gst_pad_push_event
    at gstpad.c line 4888
  • #39 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #40 gst_pad_send_event
    at gstpad.c line 5032
  • #41 gst_pad_push_event
    at gstpad.c line 4888
  • #42 gst_input_selector_event
    at gstinputselector.c line 1058
  • #43 gst_pad_send_event
    at gstpad.c line 5032
  • #44 gst_pad_push_event
    at gstpad.c line 4888
  • #45 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #46 gst_pad_send_event
    at gstpad.c line 5032
  • #47 gst_pad_push_event
    at gstpad.c line 4888
  • #48 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #49 gst_pad_send_event
    at gstpad.c line 5032
  • #50 gst_pad_push_event
    at gstpad.c line 4888
  • #51 gst_queue_handle_src_event
    at gstqueue.c line 1229
  • #52 gst_pad_send_event
    at gstpad.c line 5032
  • #53 gst_pad_push_event
    at gstpad.c line 4888
  • #54 gst_base_transform_src_eventfunc
    at gstbasetransform.c line 1821
  • #55 gst_base_transform_src_event
    at gstbasetransform.c line 1790
  • #56 gst_pad_send_event
    at gstpad.c line 5032
  • #57 gst_dvd_spu_src_event
    at gstdvdspu.c line 309
  • #58 gst_pad_send_event
    at gstpad.c line 5032
  • #59 gst_pad_push_event
    at gstpad.c line 4888
  • #60 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #61 gst_pad_send_event
    at gstpad.c line 5032
  • #62 gst_pad_push_event
    at gstpad.c line 4888
  • #63 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #64 gst_pad_send_event
    at gstpad.c line 5032
  • #65 gst_pad_push_event
    at gstpad.c line 4888
  • #66 gst_base_transform_src_eventfunc
    at gstbasetransform.c line 1821
  • #67 gst_base_transform_src_event
    at gstbasetransform.c line 1790
  • #68 gst_pad_send_event
    at gstpad.c line 5032
  • #69 gst_pad_push_event
    at gstpad.c line 4888
  • #70 gst_base_transform_src_eventfunc
    at gstbasetransform.c line 1821
  • #71 gst_video_scale_src_event
    at gstvideoscale.c line 1008
  • #72 gst_base_transform_src_event
    at gstbasetransform.c line 1790
  • #73 gst_pad_send_event
    at gstpad.c line 5032
  • #74 gst_pad_push_event
    at gstpad.c line 4888
  • #75 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #76 gst_pad_send_event
    at gstpad.c line 5032
  • #77 gst_pad_push_event
    at gstpad.c line 4888
  • #78 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #79 gst_pad_send_event
    at gstpad.c line 5032
  • #80 gst_pad_push_event
    at gstpad.c line 4888
  • #81 gst_proxy_pad_do_event
    at gstghostpad.c line 128
  • #82 gst_pad_send_event
    at gstpad.c line 5032
  • #83 gst_xvimagesink_navigation_send_event
    at xvimagesink.c line 2714
  • #84 gst_navigation_send_event
    at navigation.c line 117
  • #85 gst_navigation_send_command
    at navigation.c line 177
  • #86 bvw_do_navigation_command
    at bacon-video-widget-gst-0.10.c line 3562
  • #87 bacon_video_widget_dvd_event
    at bacon-video-widget-gst-0.10.c line 3586
  • #88 dvd_root_menu_action_callback
    at totem-menu.c line 1125
  • #89 g_cclosure_marshal_VOID__VOID
    from /usr/lib/libgobject-2.0.so.0
  • #90 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #91 ??
    from /usr/lib/libgobject-2.0.so.0
  • #92 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #93 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #94 ??
    from /usr/lib/libgtk-x11-2.0.so.0
  • #95 ??
    from /usr/lib/libgtk-x11-2.0.so.0
  • #96 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #97 ??
    from /usr/lib/libgobject-2.0.so.0
  • #98 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #99 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #100 gtk_accel_group_activate
    from /usr/lib/libgtk-x11-2.0.so.0
  • #101 gtk_accel_groups_activate
    from /usr/lib/libgtk-x11-2.0.so.0
  • #102 gtk_window_activate_key
    from /usr/lib/libgtk-x11-2.0.so.0
  • #103 ??
    from /usr/lib/libgtk-x11-2.0.so.0
  • #104 ??
    from /usr/lib/libgtk-x11-2.0.so.0
  • #105 ??
    from /usr/lib/libgobject-2.0.so.0
  • #106 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #107 ??
    from /usr/lib/libgobject-2.0.so.0
  • #108 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #109 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #110 ??
    from /usr/lib/libgtk-x11-2.0.so.0
  • #111 gtk_propagate_event
    from /usr/lib/libgtk-x11-2.0.so.0
  • #112 gtk_main_do_event
    from /usr/lib/libgtk-x11-2.0.so.0
  • #113 ??
    from /usr/lib/libgdk-x11-2.0.so.0
  • #114 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #115 ??
    from /usr/lib/libglib-2.0.so.0
  • #116 g_main_loop_run
    from /usr/lib/libglib-2.0.so.0
  • #117 gtk_main
    from /usr/lib/libgtk-x11-2.0.so.0
  • #118 main
    at totem.c line 278
  • #0 ??
    from /lib/ld-linux.so.2

Comment 1 Tim-Philipp Müller 2012-10-21 17:43:04 UTC
Not that the locking has changed much, but does this still apply?
Comment 2 Sebastian Dröge (slomo) 2013-12-30 08:25:21 UTC
Does it?
Comment 3 Jan Schmidt 2013-12-30 09:18:38 UTC
Yes, afaik - although it's quite hard to hit.
Comment 4 Sebastian Dröge (slomo) 2018-05-04 09:08:27 UTC
So let's keep this open properly then.
Comment 5 GStreamer system administrator 2018-11-03 13:04:43 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/14.