audiobasesink: fix ring buffer leak on open failure
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 9 Apr 2015 12:00:02 +0000 (13:00 +0100)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 9 Apr 2015 12:00:58 +0000 (13:00 +0100)
gst-libs/gst/audio/gstaudiobasesink.c

index 233efcb..32013fe 100644 (file)
@@ -2225,8 +2225,13 @@ gst_audio_base_sink_change_state (GstElement * element,
       sink->ringbuffer = rb;
       GST_OBJECT_UNLOCK (sink);
 
-      if (!gst_audio_ring_buffer_open_device (sink->ringbuffer))
+      if (!gst_audio_ring_buffer_open_device (sink->ringbuffer)) {
+        GST_OBJECT_LOCK (sink);
+        gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer));
+        sink->ringbuffer = NULL;
+        GST_OBJECT_UNLOCK (sink);
         goto open_failed;
+      }
       break;
     }
     case GST_STATE_CHANGE_READY_TO_PAUSED: