GNOME Bugzilla – Bug 661648
Playbin2 deadlock when setting off the TEXT bit in play flags
Last modified: 2012-06-18 16:55:41 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
+ Trace 228784
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
Actually I manage to lock the application in a similar kind of way by changing changing/query the state :
+ Trace 228785
This looks more like a plugin problem. Adding the pipeline dumps.
Created attachment 198938 [details] dump NULL -> READ
Created attachment 198939 [details] dump READ -> PAUSED
Created attachment 198940 [details] dump PAUSED -> PLAYING
Created attachment 198945 [details] gstreamer traces Adding traces that confirm a plugin problem.
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) ?
Lionel, can you please check if this still happens with a non ffmpeg decoder ?
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!