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

Lautaro Woites lauchapc87 at gmail.com
Fri Jan 24 04:56:39 PST 2014


The backtrace in the previous mail was obtained by running the example with
the arch linux binaries.
Now, I'm  running the example with a gst-uninstalled setup and the program
blows up also on videomixer but in another place.



 I've forgotten to attach the example on the previous mail. I'am attaching
it now.

Here's the backtrace:

#0  0x0000000000000000 in ?? ()
#1  0x00007f1214bb4c60 in gst_videomixer2_blend_buffers
(mix=mix at entry=0x13ea0f0,
output_start_time=output_start_time at entry=224680000000,
output_end_time=output_end_time at entry=224720000000,
    outbuf=outbuf at entry=0x7f1212dea938) at videomixer2.c:1039
#2  0x00007f1214bb5c40 in gst_videomixer2_collected (pads=<optimized out>,
mix=0x13ea0f0) at videomixer2.c:1276
#3  0x00007f12156ec507 in gst_collect_pads_check_collected
(pads=pads at entry=0x13ec160)
at gstcollectpads.c:1301
#4  0x00007f12156ed998 in gst_collect_pads_chain (pad=0x14020e0,
parent=<optimized out>, buffer=0x1404c80) at gstcollectpads.c:2023
#5  0x00007f121744bb98 in gst_pad_chain_data_unchecked (data=0x1404c80,
type=4112, pad=0x14020e0) at gstpad.c:3711
#6  gst_pad_push_data (pad=0x13da900, type=type at entry=4112, data=<optimized
out>) at gstpad.c:3941
#7  0x00007f12174526e6 in gst_pad_push (pad=<optimized out>,
buffer=<optimized out>) at gstpad.c:4044
#8  0x00007f12156e5e29 in gst_base_transform_chain (pad=<optimized out>,
parent=0x13e5b30, buffer=<optimized out>) at gstbasetransform.c:2237
#9  0x00007f121744bb98 in gst_pad_chain_data_unchecked (data=0x1404c80,
type=4112, pad=0x13da6d0) at gstpad.c:3711
#10 gst_pad_push_data (pad=0x13da4a0, type=type at entry=4112, data=<optimized
out>) at gstpad.c:3941
#11 0x00007f12174526e6 in gst_pad_push (pad=<optimized out>,
buffer=<optimized out>) at gstpad.c:4044
#12 0x00007f12156e5e29 in gst_base_transform_chain (pad=<optimized out>,
parent=0x13de150, buffer=<optimized out>) at gstbasetransform.c:2237
#13 0x00007f121744bb98 in gst_pad_chain_data_unchecked (data=0x1404c80,
type=4112, pad=0x13da270) at gstpad.c:3711
#14 gst_pad_push_data (pad=pad at entry=0x13da040, type=type at entry=4112,
data=<optimized out>) at gstpad.c:3941
#15 0x00007f12174526e6 in gst_pad_push (pad=pad at entry=0x13da040,
buffer=<optimized out>) at gstpad.c:4044
#16 0x00007f12156de285 in gst_base_src_loop (pad=0x13da040) at
gstbasesrc.c:2779
#17 0x00007f12174790f9 in gst_task_func (task=0x1412050) at gsttask.c:316
#18 0x00007f12167fc976 in ?? () from /usr/lib/libglib-2.0.so.0
#19 0x00007f12167fbfb5 in ?? () from /usr/lib/libglib-2.0.so.0
#20 0x00007f121657a0a2 in start_thread () from /usr/lib/libpthread.so.0
#21 0x00007f12162ad32d in clone () from /usr/lib/libc.so.6



2014/1/23 Lautaro Woites <lauchapc87 at gmail.com>

>
>
>
> 2014/1/23 Sebastian Dröge <sebastian at centricular.com>
>
>> On Mi, 2014-01-22 at 17:51 -0200, Lautaro Woites wrote:
>> > 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 :(.
>>
>> The sequence of actions sounds correct
>>
>> > 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 ?
>>
>> It might indeed be this bug, but then it wouldn't happen always. Could
>> you attach a testcase to that bug that reproduces the crash? What you're
>> doing is supposed to work and definitely should not crash.
>>
>>
> OK I've attached an example to the ticket.
>
> Hope it helps. If you need more info just tell me.
>
>
>> --
>> Sebastian Dröge, Centricular Ltd - http://www.centricular.com
>> Expertise, Straight from the Source
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20140124/43ed8132/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: example.c
Type: text/x-csrc
Size: 8275 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20140124/43ed8132/attachment.c>


More information about the gstreamer-devel mailing list