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 661648 - Playbin2 deadlock when setting off the TEXT bit in play flags
Playbin2 deadlock when setting off the TEXT bit in play flags
Status: RESOLVED INCOMPLETE
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
0.10.35
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2011-10-13 11:26 UTC by Lionel Landwerlin
Modified: 2012-06-18 16:55 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
dump NULL -> READ (759 bytes, application/msword-template)
2011-10-13 14:15 UTC, Lionel Landwerlin
Details
dump READ -> PAUSED (28.64 KB, application/msword-template)
2011-10-13 14:16 UTC, Lionel Landwerlin
Details
dump PAUSED -> PLAYING (28.64 KB, application/msword-template)
2011-10-13 14:16 UTC, Lionel Landwerlin
Details
gstreamer traces (971.52 KB, text/plain)
2011-10-13 15:32 UTC, Lionel Landwerlin
Details

Description Lionel Landwerlin 2011-10-13 11:26:29 UTC
Hi,

I'm having a deadlock when using playbin2. My use case might be a bit brain damage, but still.
So I have a video stream containing 1 video and 2 audio streams and also have a .srt subtitle file. I start up the playbin pipeline this way :

1- set the "uri" property
2- set the "suburi" property
3- set the pipeline state to playing

The subtitles are displayed and the video is playing.

Then I try to hide the subtitles by removing the TEXT bit from the play flags :


  g_object_get (priv->pipeline, "flags", &flags, NULL);     
  flags &= ~GST_PLAY_FLAG_TEXT;                             
  g_object_set (priv->pipeline, "flags", flags, NULL);      


And my application ends up in a dead lock :


Program received signal SIGINT, Interrupt.
__lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:136
136	../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: No such file or directory.
	in ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
(gdb) bt
  • #0 __lll_lock_wait
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S line 136
  • #1 _L_lock_926
    from /lib/x86_64-linux-gnu/libpthread.so.0
  • #2 __pthread_mutex_lock
    at pthread_mutex_lock.c line 61
  • #3 g_static_rec_mutex_lock
    at gthread.c line 1450
  • #4 post_activate
    at gstpad.c line 657
  • #5 gst_pad_activate_push
    at gstpad.c line 960
  • #6 gst_pad_set_active
    at gstpad.c line 715
  • #7 gst_stream_synchronizer_release_stream
    at gststreamsynchronizer.c line 792
  • #8 gst_stream_synchronizer_release_pad
    at gststreamsynchronizer.c line 840
  • #9 gst_element_release_request_pad
    at gstelement.c line 344
  • #10 gst_play_sink_reconfigure
    at gstplaysink.c line 2569
  • #11 gst_play_bin_set_flags
    at gstplaybin2.c line 1317
  • #12 gst_play_bin_set_property
    at gstplaybin2.c line 1811
  • #13 object_set_property
    at gobject.c line 1199
  • #14 g_object_set_valist
    at gobject.c line 1727
  • #15 g_object_set
    at gobject.c line 1833
  • #16 clutter_gst_player_set_subtitle_track_impl
    at ./clutter-gst-player.c line 2196
  • #17 clutter_gst_player_set_subtitle_track
    at ./clutter-gst-player.c line 2831
  • #18 subtitle_combo_box_notify
    at mex-info-panel.c line 381
  • #19 g_cclosure_marshal_VOID__PARAMv
    at gmarshal.c line 1092
  • #20 g_closure_invoke_valist
    at gclosure.c line 927
  • #21 signal_emit_unlocked_R
    at gsignal.c line 3428
  • #22 g_signal_emit_valist
    at gsignal.c line 3073
  • #23 g_signal_emit
    at gsignal.c line 3193
  • #24 g_object_dispatch_properties_changed
    at gobject.c line 925
  • #25 g_object_notify_dispatcher
    at gobject.c line 331
  • #26 g_object_notify_queue_thaw
    at gobjectnotifyqueue.c line 132
  • #27 g_object_notify_by_spec_internal
    at gobject.c line 983
  • #28 g_object_notify
    at gobject.c line 1024
  • #29 mx_combo_box_set_index
    at ../mx/mx-combo-box.c line 1048
  • #30 mx_combo_box_action_activated_cb
    at ../mx/mx-combo-box.c line 487
  • #31 g_cclosure_marshal_VOID__OBJECTv
    at gmarshal.c line 1326
  • #32 g_closure_invoke_valist
    at gclosure.c line 927
  • #33 signal_emit_unlocked_R
    at gsignal.c line 3428
  • #34 g_signal_emit_valist
    at gsignal.c line 3073
  • #35 g_signal_emit
    at gsignal.c line 3193
  • #36 mx_menu_button_clicked_cb
    at ../mx/mx-menu.c line 684
  • #37 g_cclosure_marshal_VOID__VOIDv
    at gmarshal.c line 81
  • #38 g_closure_invoke_valist
    at gclosure.c line 927
  • #39 signal_emit_unlocked_R
    at gsignal.c line 3428
  • #40 g_signal_emit_valist
    at gsignal.c line 3073
  • #41 g_signal_emit
    at gsignal.c line 3193
  • #42 mx_button_pull
    at ../mx/mx-button.c line 318
  • #43 mx_button_key_release
    at ../mx/mx-button.c line 386
  • #44 _clutter_marshal_BOOLEAN__BOXEDv
    at clutter-marshal.c line 90
  • #45 _g_type_class_meta_marshal_valist
    at gclosure.c line 1079
  • #46 g_closure_invoke_valist
    at gclosure.c line 927
  • #47 signal_emit_unlocked_R
    at gsignal.c line 3484
  • #48 g_signal_emit_valist
    at gsignal.c line 3085
  • #49 g_signal_emit
    at gsignal.c line 3193
  • #50 clutter_actor_event
    at ./clutter-actor.c line 8702
  • #51 emit_event
    at ./clutter-main.c line 1968
  • #52 emit_keyboard_event
    at ./clutter-main.c line 2018
  • #53 _clutter_process_event_details
    at ./clutter-main.c line 2108
  • #54 _clutter_process_event
    at ./clutter-main.c line 2331
  • #55 _clutter_stage_process_queued_events
    at ./clutter-stage.c line 898
  • #56 clutter_clock_dispatch
    at ./clutter-master-clock.c line 374
  • #57 g_main_dispatch
    at gmain.c line 2441
  • #58 g_main_context_dispatch
    at gmain.c line 3011
  • #59 g_main_context_iterate
    at gmain.c line 3089
  • #60 g_main_loop_run
    at gmain.c line 3297
  • #61 clutter_main
    at ./clutter-main.c line 677
  • #62 mx_application_run
    at ../mx/mx-application.c line 704
  • #63 main
    at mex-main.c line 2609

Comment 1 Lionel Landwerlin 2011-10-13 13:41:57 UTC
Some infos about the media file :

Topology:
  container: Audio Video Interleave (AVI)
    audio: MPEG-1 Layer 3 (MP3)
    audio: MPEG-1 Layer 3 (MP3)
    video: XVID MPEG-4

Properties:
  Duration: 1:53:18.920000000
  Seekable: yes
  Tags: 
      video codec: XVID MPEG-4
      audio codec: MPEG-1 layer 3
      encoder: VirtualDubMod 1.5.10.2 Fr | www.trad-fr.com ||  (build 2540/release)
      container format: AVI
      nominal bitrate: 128000
      has crc: true
      channel mode: joint-stereo
      layer: 3
      mode: joint
      emphasis: none
      bitrate: 128000
Comment 2 Lionel Landwerlin 2011-10-13 14:04:39 UTC
Actually I manage to lock the application in a similar kind of way by changing changing/query the state :


  • #0 pthread_cond_wait
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S line 162
  • #1 g_cond_timed_wait_posix_impl
    at gthread-posix.c line 231
  • #2 gst_element_get_state_func
    at gstelement.c line 2158
  • #3 gst_bin_get_state_func
    at gstbin.c line 1769
  • #4 gst_element_get_state
    at gstelement.c line 2262
  • #5 clutter_gst_player_set_subtitle_track_impl
    at ./clutter-gst-player.c line 2237
  • #6 clutter_gst_player_set_subtitle_track
    at ./clutter-gst-player.c line 2856
  • #7 subtitle_combo_box_notify
    at mex-info-panel.c line 381
  • #8 g_cclosure_marshal_VOID__PARAMv
    at gmarshal.c line 1092
  • #9 g_closure_invoke_valist
    at gclosure.c line 927
  • #10 signal_emit_unlocked_R
    at gsignal.c line 3428
  • #11 g_signal_emit_valist
    at gsignal.c line 3073
  • #12 g_signal_emit
    at gsignal.c line 3193
  • #13 g_object_dispatch_properties_changed
    at gobject.c line 925
  • #14 g_object_notify_dispatcher
    at gobject.c line 331
  • #15 g_object_notify_queue_thaw
    at gobjectnotifyqueue.c line 132
  • #16 g_object_notify_by_spec_internal
    at gobject.c line 983
  • #17 g_object_notify
    at gobject.c line 1024
  • #18 mx_combo_box_set_index
    at ../mx/mx-combo-box.c line 1048
  • #19 mx_combo_box_action_activated_cb
    at ../mx/mx-combo-box.c line 487
  • #20 g_cclosure_marshal_VOID__OBJECTv
    at gmarshal.c line 1326
  • #21 g_closure_invoke_valist
    at gclosure.c line 927
  • #22 signal_emit_unlocked_R
    at gsignal.c line 3428
  • #23 g_signal_emit_valist
    at gsignal.c line 3073
  • #24 g_signal_emit
    at gsignal.c line 3193
  • #25 mx_menu_button_clicked_cb
    at ../mx/mx-menu.c line 684
  • #26 g_cclosure_marshal_VOID__VOIDv
    at gmarshal.c line 81
  • #27 g_closure_invoke_valist
    at gclosure.c line 927
  • #28 signal_emit_unlocked_R
    at gsignal.c line 3428
  • #29 g_signal_emit_valist
    at gsignal.c line 3073
  • #30 g_signal_emit
    at gsignal.c line 3193
  • #31 mx_button_pull
    at ../mx/mx-button.c line 318
  • #32 mx_button_key_release
    at ../mx/mx-button.c line 386
  • #33 _clutter_marshal_BOOLEAN__BOXEDv
    at clutter-marshal.c line 90
  • #34 _g_type_class_meta_marshal_valist
    at gclosure.c line 1079
  • #35 g_closure_invoke_valist
    at gclosure.c line 927
  • #36 signal_emit_unlocked_R
    at gsignal.c line 3484
  • #37 g_signal_emit_valist
    at gsignal.c line 3085
  • #38 g_signal_emit
    at gsignal.c line 3193
  • #39 clutter_actor_event
    at ./clutter-actor.c line 8702
  • #40 emit_event
    at ./clutter-main.c line 1968
  • #41 emit_keyboard_event
    at ./clutter-main.c line 2018
  • #42 _clutter_process_event_details
    at ./clutter-main.c line 2108
  • #43 _clutter_process_event
    at ./clutter-main.c line 2331
  • #44 _clutter_stage_process_queued_events
    at ./clutter-stage.c line 898
  • #45 clutter_clock_dispatch
    at ./clutter-master-clock.c line 374
  • #46 g_main_dispatch
    at gmain.c line 2441
  • #47 g_main_context_dispatch
    at gmain.c line 3011
  • #48 g_main_context_iterate
    at gmain.c line 3089
  • #49 g_main_loop_run
    at gmain.c line 3297
  • #50 clutter_main
    at ./clutter-main.c line 677
  • #51 mx_application_run
    at ../mx/mx-application.c line 704
  • #52 main
    at mex-main.c line 2609

Comment 3 Lionel Landwerlin 2011-10-13 14:15:19 UTC
This looks more like a plugin problem. Adding the pipeline dumps.
Comment 4 Lionel Landwerlin 2011-10-13 14:15:42 UTC
Created attachment 198938 [details]
dump NULL -> READ
Comment 5 Lionel Landwerlin 2011-10-13 14:16:00 UTC
Created attachment 198939 [details]
dump READ -> PAUSED
Comment 6 Lionel Landwerlin 2011-10-13 14:16:18 UTC
Created attachment 198940 [details]
dump PAUSED -> PLAYING
Comment 7 Lionel Landwerlin 2011-10-13 15:32:17 UTC
Created attachment 198945 [details]
gstreamer traces

Adding traces that confirm a plugin problem.
Comment 8 Vincent Penquerc'h 2012-01-31 13:46:55 UTC
Those traces aren't very helpful when showing a deadlock. A better trace can be shown by, instead of just "bt", using "thread apply all bt", which will show all threads (since at least two must lock for a deadlock).

In any case, I think this is more likely to be an issue in playbin2, which should wait until nothing flows on the pipeline before reconfiguring itself from the new flags.

Could check if this still happens with a non ffmpeg decoder (which is the plugin that emits those errors AFAICS) ?
Comment 9 Akhil Laddha 2012-03-24 11:03:17 UTC
Lionel, can you please check if this still happens with a non ffmpeg decoder ?
Comment 10 Akhil Laddha 2012-06-18 16:55:41 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!