[Bug 757975] New: jackaudiosink leaks file descriptors when errors occur.

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Thu Nov 12 01:28:59 PST 2015


https://bugzilla.gnome.org/show_bug.cgi?id=757975

            Bug ID: 757975
           Summary: jackaudiosink leaks file descriptors when errors
                    occur.
    Classification: Platform
           Product: GStreamer
           Version: 1.6.0
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-plugins-good
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: talinnell at gmail.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

I have written a media player which uses playbin with the audio-sink set to
jackaudiosink.

When the playback completes correctly, there is no issue.

When an error occurs, for instance when the JACK server is not present, then
the application will leak file descriptors until they run out and my
application crashes.

I have narrowed this behaviour down to the jackaudiosink, as it does not happen
with other audio-sinks. Additionally, file descriptor leaks are also seen when
using gst-play with the jackaudiosink.

I have also produced the minimal code to reproduce this, as below:

#include <gst/gst.h>
#include <glib.h>
#include <unistd.h>

gint
main(gint argc, gchar *argv[]) {

    gst_init(&argc, &argv);

    GstElement *audio_sink = gst_element_factory_make("jackaudiosink", NULL);
    GstElement *play = gst_element_factory_make("playbin", "play");

    g_object_set(G_OBJECT(play), "uri", argv[1], NULL);
    g_object_set(G_OBJECT(play), "audio-sink", audio_sink, NULL);

    gst_element_set_state(play, GST_STATE_PLAYING);

    sleep(1);

    gst_element_set_state(play, GST_STATE_NULL);

    gst_object_unref(GST_OBJECT(play));

    gst_deinit();

    return 0;
}

Compiled with the following, on Ubuntu 15.10:

gcc -Wall jack_leak.c -o jack_leak $(pkg-config --cflags --libs gstreamer-1.0)

The file descriptors can be shown with valgrind. Trace shown below after
running
valgrind --track-fds=yes --suppressions=gst.supp ./jack_leak
file:///home/tristan/test.mp3 

are shown below:

==52435== FILE DESCRIPTORS: 7 open at exit.
==52435== Open AF_UNIX socket 6: <unknown>
==52435==    at 0x56D10EA: socketpair (syscall-template.S:81)
==52435==    by 0x4EB6919: gst_poll_new (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4EB6A0D: gst_poll_new_timer (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4E760B7: gst_bus_constructed (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x516D906: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516EC70: g_object_newv (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x4E76771: gst_bus_new (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4EAFDAD: gst_pipeline_init (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x518B3B6: g_type_create_instance (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516D38A: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F224: g_object_new_valist (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F590: g_object_new (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435== 
==52435== Open AF_UNIX socket 5: <unknown>
==52435==    at 0x56D10EA: socketpair (syscall-template.S:81)
==52435==    by 0x4EB6919: gst_poll_new (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4EB6A0D: gst_poll_new_timer (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4E760B7: gst_bus_constructed (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x516D906: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516EC70: g_object_newv (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x4E76771: gst_bus_new (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4EAFDAD: gst_pipeline_init (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x518B3B6: g_type_create_instance (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516D38A: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F224: g_object_new_valist (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F590: g_object_new (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435== 
==52435== Open AF_UNIX socket 4: <unknown>
==52435==    at 0x56D10EA: socketpair (syscall-template.S:81)
==52435==    by 0x4EB6919: gst_poll_new (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4EB6A0D: gst_poll_new_timer (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4ECDC75: gst_system_clock_init (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x518B3B6: g_type_create_instance (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516D38A: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F224: g_object_new_valist (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F590: g_object_new (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x74508CE: gst_audio_clock_new (in
/usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0.600.0)
==52435==    by 0x746AD0F: gst_audio_base_sink_init (in
/usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0.600.0)
==52435==    by 0x518B3B6: g_type_create_instance (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516D38A: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435== 
==52435== Open AF_UNIX socket 3: <unknown>
==52435==    at 0x56D10EA: socketpair (syscall-template.S:81)
==52435==    by 0x4EB6919: gst_poll_new (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4EB6A0D: gst_poll_new_timer (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x4ECDC75: gst_system_clock_init (in
/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.600.0)
==52435==    by 0x518B3B6: g_type_create_instance (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516D38A: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F224: g_object_new_valist (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516F590: g_object_new (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x74508CE: gst_audio_clock_new (in
/usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0.600.0)
==52435==    by 0x746AD0F: gst_audio_base_sink_init (in
/usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0.600.0)
==52435==    by 0x518B3B6: g_type_create_instance (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435==    by 0x516D38A: g_object_new_internal (in
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4600.1)
==52435== 
==52435== Open file descriptor 2: /dev/pts/0
==52435==    <inherited from parent>
==52435== 
==52435== Open file descriptor 1: /dev/pts/0
==52435==    <inherited from parent>
==52435== 
==52435== Open file descriptor 0: /dev/pts/0
==52435==    <inherited from parent>

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list