GNOME Bugzilla – Bug 536258
interleave doesn't close properly
Last modified: 2008-06-03 14:35:47 UTC
Please describe the problem: I have a pipeline with multichannel audio (6 or 8, both give the same result) being interleaved. From the command line, when I try to exit with ctrl-C, the program doesn't exit until I hit control-c again and also produces a low frequency sawtooth like sound until I exit. In a C program, when the pipeline should be destroyed it also hangs (my guess is some of the threads don't exit properly).Note that the same example in mono or 2 channel audio does NOT hang. Steps to reproduce: gst-launch-0.10 -v interleave name=i ! audioconvert ! queue ! jackaudiosink sync=false \ audiotestsrc volume=0.5 freq=200 is-live=true ! audioconvert ! queue ! i. \ audiotestsrc volume=0.1 freq=300 is-live=true ! audioconvert ! queue ! i. \ audiotestsrc volume=0.1 freq=500 is-live=true ! audioconvert ! queue ! i. \ audiotestsrc volume=0.1 freq=700 is-live=true ! audioconvert ! queue ! i. \ audiotestsrc volume=0.1 freq=900 is-live=true ! audioconvert ! queue ! i. \ audiotestsrc volume=0.4 freq=1100 is-live=true ! audioconvert ! queue ! i. \ audiotestsrc volume=0.4 freq=1300 is-live=true ! audioconvert ! queue ! i. \ audiotestsrc volume=0.4 freq=1400 is-live=true ! audioconvert ! queue ! i. \ Then try to exit with control-C. Actual results: It will hang as described with this message: Caught interrupt -- handling interrupt. Interrupt: Stopping pipeline ... Execution ended after 894420256 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... /pipeline0/jackaudiosink0.sink: caps = NULL /pipeline0/queue0.src: caps = NULL /pipeline0/queue0.sink: caps = NULL /pipeline0/audioconvert0.src: caps = NULL /pipeline0/audioconvert0.sink: caps = NULL until control-C is used again. Expected results: The program should exit normally and the audio should be killed. Does this happen every time? 80% of the time (sometimes it does quit normally). Other information:
2008-06-03 Sebastian Dröge <slomo@circular-chaos.org> * gst/interleave/interleave.c: (gst_interleave_pad_get_type), (gst_interleave_change_state): Stop GstCollectPads before calling the parent's state change function when going from PAUSED to READY as we otherwise deadlock. Fixes bug #536258.