[gst 1.2.2] remove a request pad from videomixer cause SEGFAULT

Lautaro Woites lauchapc87 at gmail.com
Wed Jan 22 11:51:21 PST 2014


Hi again folks,

I have this pipe: videotestsrc ! capsfilter ! videomixer ! xvimagesink.
Then on PLAYING STATE I do:

while (TRUE){
    sleep(2);
    add_mixer_input(); //adds an input on the videomixer
    sleep(2);
    remove_mixer_input(); //removes the previously added input to the mixer.
}

The inputs are bins with videotestsrc and a capsfilter. The example runs
for a time (sometimes 5 minutes, sometimes 30 min, others 10 seconds) and
then produces a segmentation fault on the videomixer (at
gst_collect_pads_check_collected:1031).

This is what I do to remove the input:
     a) I  block the videotestsrc's src pad.
     b) I send an EOS event to the capsfilter's sink pad and I wait for the
event on the bin's src pad ( with an event probe).
     c) On the  event probe's callback I drop the EOS and I unlink the bin
with the mixer.
     d) I set the bin to STATE_NULL and I remove it from the pipe.
     e) I call release_request_pad on the mixer.
     f) I remove the block pad on the videotestsrc.
Also I've tried: to send EOS to the videtestsrc - set the bin to STATE_NULL
and remove it - and finally call release_request_pad on the mixer.
The program  crashed in the same line .

NOTE:   If I remove the call to gst_release_request_pad the program seems
to work OK. But the mixer's will still having unused sink pads :(.

I have some question about this:
   1) I don't know if I am missing something or if there is a bug.
   2) If I'm doing something wrong, What's the correct/safest  protocol to
remove an input from the mixer?.
   3) is it related with this ticket:
https://bugzilla.gnome.org/show_bug.cgi?id=701110 ?


I've attached an example program. In my PC if I want to blow up the program
faster I ran it with GST_DEBUG=4.



The complete backtrace is:
(gdb) bt
#0  0x0000000000000000 in ?? ()
#1  0x00007f64932efc90 in ?? () from
/usr/lib/gstreamer-1.0/libgstvideomixer.so
#2  0x00007f64932f0ca1 in ?? () from
/usr/lib/gstreamer-1.0/libgstvideomixer.so
#3  0x00007f6493e285f7 in gst_collect_pads_check_collected
(pads=pads at entry=0x105d0d0)
at gstcollectpads.c:1301
#4  0x00007f6493e29a88 in gst_collect_pads_chain (pad=0x106a040,
parent=<optimized out>, buffer=0x106cbe0) at gstcollectpads.c:2023
#5  0x00007f6495b87d78 in gst_pad_chain_data_unchecked (data=0x106cbe0,
type=4112, pad=0x106a040) at gstpad.c:3711
#6  gst_pad_push_data (pad=0x104a960, type=type at entry=4112, data=<optimized
out>) at gstpad.c:3941
#7  0x00007f6495b8e8c6 in gst_pad_push (pad=<optimized out>,
buffer=<optimized out>) at gstpad.c:4044
#8  0x00007f6493e220b9 in gst_base_transform_chain (pad=<optimized out>,
parent=0x10573d0, buffer=<optimized out>) at gstbasetransform.c:2237
#9  0x00007f6495b87d78 in gst_pad_chain_data_unchecked (data=0x106cbe0,
type=4112, pad=0x104a730) at gstpad.c:3711
#10 gst_pad_push_data (pad=0x104a500, type=type at entry=4112, data=<optimized
out>) at gstpad.c:3941
#11 0x00007f6495b8e8c6 in gst_pad_push (pad=<optimized out>,
buffer=<optimized out>) at gstpad.c:4044
#12 0x00007f6493e220b9 in gst_base_transform_chain (pad=<optimized out>,
parent=0x10500f0, buffer=<optimized out>) at gstbasetransform.c:2237
#13 0x00007f6495b87d78 in gst_pad_chain_data_unchecked (data=0x106cbe0,
type=4112, pad=0x104a2d0) at gstpad.c:3711
#14 gst_pad_push_data (pad=pad at entry=0x104a0a0, type=type at entry=4112,
data=<optimized out>) at gstpad.c:3941
#15 0x00007f6495b8e8c6 in gst_pad_push (pad=pad at entry=0x104a0a0,
buffer=<optimized out>) at gstpad.c:4044
#16 0x00007f6493e1a515 in gst_base_src_loop (pad=0x104a0a0) at
gstbasesrc.c:2779
#17 0x00007f6495bb5439 in gst_task_func (task=0x1079050) at gsttask.c:316
#18 0x00007f6495643976 in ?? () from /usr/lib/libglib-2.0.so.0
#19 0x00007f6495642fb5 in ?? () from /usr/lib/libglib-2.0.so.0
#20 0x00007f64953c10a2 in start_thread () from /usr/lib/libpthread.so.0
#21 0x00007f64950f432d in clone () from /usr/lib/libc.so.6

Thanks again
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20140122/71140960/attachment-0001.html>


More information about the gstreamer-devel mailing list