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 703114 - deinterleave: deadlock while pushing pending events on all source pads
deinterleave: deadlock while pushing pending events on all source pads
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
1.0.7
Other All
: Normal major
: 1.1.2
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2013-06-26 12:04 UTC by Kishore Arepalli
Modified: 2013-07-01 10:56 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Fix to avoid deadlock (2.08 KB, patch)
2013-06-26 12:45 UTC, Kishore Arepalli
committed Details | Review

Description Kishore Arepalli 2013-06-26 12:04:28 UTC
gst-launch-1.0 audiotestsrc num-buffers=10 ! "audio/x-raw,channels=2" ! deinterleave name=d d.src_0 ! fakesink

  • #0 __kernel_vsyscall
  • #1 __lll_lock_wait
    from /lib/i386-linux-gnu/libpthread.so.0
  • #2 _L_lock_891
    from /lib/i386-linux-gnu/libpthread.so.0
  • #3 pthread_mutex_lock
    from /lib/i386-linux-gnu/libpthread.so.0
  • #4 g_mutex_lock
    from /lib/i386-linux-gnu/libglib-2.0.so.0
  • #5 bin_element_is_sink
    at gstbin.c line 1678
  • #6 is_stream_start
    at gstbin.c line 1023
  • #7 bin_do_stream_start
    at gstbin.c line 3170
  • #8 gst_bin_handle_message_func
    at gstbin.c line 3317
  • #9 gst_pipeline_handle_message
    at gstpipeline.c line 572
  • #10 bin_bus_handler
    at gstbin.c line 2882
  • #11 gst_bus_post
    at gstbus.c line 330
  • #12 gst_element_post_message
    at gstelement.c line 1699
  • #13 gst_base_sink_default_event
    at gstbasesink.c line 2900
  • #14 gst_fake_sink_event
    at gstfakesink.c line 383
  • #15 gst_base_sink_event
    at gstbasesink.c line 3013
  • #16 gst_pad_send_event_unchecked
    at gstpad.c line 4821
  • #17 gst_pad_push_event_unchecked
    at gstpad.c line 4514
  • #18 push_sticky
    at gstpad.c line 3285
  • #19 events_foreach
    at gstpad.c line 514
  • #20 check_sticky
    at gstpad.c line 3333
  • #21 gst_pad_push_event
    at gstpad.c line 4635
  • #22 gst_deinterleave_process
    at deinterleave.c line 695
  • #23 gst_deinterleave_chain
    at deinterleave.c line 813
  • #24 gst_pad_chain_data_unchecked
  • #25 gst_pad_push_data
  • #26 gst_pad_push
    at gstpad.c line 3974
  • #27 gst_base_transform_chain
    at gstbasetransform.c line 2203
  • #28 gst_pad_chain_data_unchecked
  • #29 gst_pad_push_data
  • #30 gst_pad_push
    at gstpad.c line 3974
  • #31 gst_base_src_loop
    at gstbasesrc.c line 2700
  • #32 gst_task_func
    at gsttask.c line 316
  • #33 default_func
    at gsttaskpool.c line 70

Comment 1 Kishore Arepalli 2013-06-26 12:45:11 UTC
Created attachment 247818 [details] [review]
Fix to avoid deadlock

Avoid locking the object while pushing pending events
Comment 2 Sebastian Dröge (slomo) 2013-07-01 09:38:29 UTC
Pushed a slightly different patch that cleans up that code a bit.

commit 5f6469fe2ae0705f593a59ed7b7805e4a1af1bc2
Author: Sebastian Dröge <slomo@circular-chaos.org>
Date:   Mon Jul 1 11:37:00 2013 +0200

    deinterleave: Don't hold object lock while sending events downstream
    
    Based on a patch by Kishore Arepalli <kishore.arepalli@gmail.com>
    
    https://bugzilla.gnome.org/show_bug.cgi?id=703114