nicesrc: Clear the output buffer queue when shutting down and disposing
authorSebastian Dröge <sebastian@centricular.com>
Thu, 19 Mar 2015 08:21:23 +0000 (09:21 +0100)
committerOlivier Crête <olivier.crete@collabora.com>
Fri, 27 Mar 2015 23:37:08 +0000 (19:37 -0400)
https://bugs.freedesktop.org/show_bug.cgi?id=89673

gst/gstnicesrc.c

index 0c75c18..a113406 100644 (file)
@@ -322,8 +322,10 @@ gst_nice_src_dispose (GObject *object)
     g_main_context_unref (src->mainctx);
   src->mainctx = NULL;
 
-  if (src->outbufs)
+  if (src->outbufs) {
+    g_queue_foreach (src->outbufs, (GFunc) gst_buffer_unref, NULL);
     g_queue_free (src->outbufs);
+  }
   src->outbufs = NULL;
 
   G_OBJECT_CLASS (gst_nice_src_parent_class)->dispose (object);
@@ -416,6 +418,10 @@ gst_nice_src_change_state (GstElement * element, GstStateChange transition)
     case GST_STATE_CHANGE_READY_TO_NULL:
       nice_agent_attach_recv (src->agent, src->stream_id, src->component_id,
           src->mainctx, NULL, NULL);
+      GST_OBJECT_LOCK (src);
+      g_queue_foreach (src->outbufs, (GFunc) gst_buffer_unref, NULL);
+      g_queue_clear (src->outbufs);
+      GST_OBJECT_UNLOCK (src);
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING: