Force stopping a gstreamer pipeline

marcin at saepia.net marcin at saepia.net
Thu Jul 7 16:10:41 UTC 2016


My experience with JACK is that when the JACK daemon deadlocks due to
failure of any client (or one of JACK internal bugs) the result in
GStreamer may be also a deadlock as it waits indefinitely for processing.

In practice I found JACK not suitable for anything serious.

Marcin

2016-06-06 16:45 GMT+02:00 Thomas Scheuermann <scheuermann at barco.com>:

> Hi,
>
> Am 03.06.2016 um 12:59 schrieb Nicolas Dufresne:
>
>
> Le 3 juin 2016 5:06 AM, "Thomas Scheuermann" < <scheuermann at barco.com>
> scheuermann at barco.com> a écrit :
> >
> > Hello,
> >
> > is there a way to force the stopping of a gstreamer pipeline?
> > We have here a process running with several pipelines which are started
> > and stopped dynamically. Sometimes it happens that when I set the state
> > of the pipeline to GST_STATE_NULL (gst_element_set_state(_pipeline,
> > GST_STATE_NULL);) this call never comes back.
> > What can I do in this situation?
> > I use gstreamer 1.8.1
> >
>
> This is a deadlock. It should not happen unless you are doing something
> wrong in your application, or if you have hit a big in GStreamer. You may
> want to share a full backtrace.
>
> Nicolas
>
> Here is a sample code of a deadlock. I think, it is in jackaudiosink.
> If you restart the jack daemon while the pipeline is playing, the pipeline
> can't be stopped anymore.
>
> /*
>  * reproducer for deadlock
>  *
>  * gcc -o deadlock deadlock.c -g `pkg-config --libs --cflags
> gstreamer-1.0` -Wall
>  */
> #include <stdio.h>
> #include <gst/gst.h>
>
> int main(int argc, char **argv)
> {
>     GstElement *pipeline;
>     GstElement *audiosrc;
>     GstElement *audiofilter;
>     GstElement *audiosink;
>     GstCaps *caps;
>
>     gst_init(&argc, &argv);
>
>     pipeline = gst_pipeline_new("pipeline");
>     g_assert(pipeline);
>
>     audiosrc = gst_element_factory_make("audiotestsrc", "audiotestsrc");
>     g_assert(audiosrc);
>
>     audiofilter = gst_element_factory_make("capsfilter", "capsfilter");
>     g_assert(audiofilter);
>     caps = gst_caps_new_simple("audio/x-raw", "channels", G_TYPE_INT, 2,
> NULL);
>     g_object_set(G_OBJECT(audiofilter), "caps",caps, NULL);
>     gst_caps_unref(caps);
>
>     audiosink = gst_element_factory_make("jackaudiosink", "jackaudiosink");
>     g_assert(audiosink);
>     g_object_set(G_OBJECT(audiosink), "client-name", "test", NULL);
>
>     g_print("Adding elements\n");
>     gst_bin_add_many(GST_BIN(pipeline), audiosrc, audiofilter, audiosink,
> NULL);
>
>     gst_element_link_many(audiosrc, audiofilter, audiosink, NULL);
>
>     g_print("Set pipeline state to playing\n");
>     gst_element_set_state(pipeline, GST_STATE_PLAYING);
>
>     g_print("Restart jack daemon and press enter\n");
>     getchar();
>
>     g_print("Set pipeline state to null\n");
>     gst_element_set_state(pipeline, GST_STATE_NULL);
>     g_print("Unref pipeline\n");
>     gst_object_unref(pipeline);
>
>     return 0;
> }
>
>
> This message is subject to the following terms and conditions: MAIL
> DISCLAIMER <http://www.barco.com/en/maildisclaimer>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20160707/ee10fa65/attachment.html>


More information about the gstreamer-devel mailing list