gstqueue, gstqueue2: check if parent of pad is NULL in _getcaps
authorStian Selnes <stiaseln@cisco.com>
Tue, 29 Mar 2011 09:57:06 +0000 (11:57 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 8 Apr 2011 12:51:06 +0000 (14:51 +0200)
Parent of the pad (the queue) may be set to NULL while there is
a buffer alloc going on.

plugins/elements/gstqueue.c
plugins/elements/gstqueue2.c

index a641dfe..6a21a3e 100644 (file)
@@ -487,13 +487,17 @@ gst_queue_getcaps (GstPad * pad)
   GstPad *otherpad;
   GstCaps *result;
 
-  queue = GST_QUEUE (GST_PAD_PARENT (pad));
+  queue = GST_QUEUE (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (queue == NULL))
+    return gst_caps_new_any ();
 
   otherpad = (pad == queue->srcpad ? queue->sinkpad : queue->srcpad);
   result = gst_pad_peer_get_caps (otherpad);
   if (result == NULL)
     result = gst_caps_new_any ();
 
+  gst_object_unref (queue);
+
   return result;
 }
 
index adc304a..08ce4cb 100644 (file)
@@ -648,13 +648,17 @@ gst_queue2_getcaps (GstPad * pad)
   GstPad *otherpad;
   GstCaps *result;
 
-  queue = GST_QUEUE2 (GST_PAD_PARENT (pad));
+  queue = GST_QUEUE2 (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (queue == NULL))
+    return gst_caps_new_any ();
 
   otherpad = (pad == queue->srcpad ? queue->sinkpad : queue->srcpad);
   result = gst_pad_peer_get_caps (otherpad);
   if (result == NULL)
     result = gst_caps_new_any ();
 
+  gst_object_unref (queue);
+
   return result;
 }