It is possible that the element might be going down while the event arrives
static gboolean
gst_queue_handle_src_query (GstPad * pad, GstQuery * query)
{
static gboolean
gst_queue_handle_src_query (GstPad * pad, GstQuery * query)
{
- GstQueue *queue = GST_QUEUE (GST_PAD_PARENT (pad));
+ GstQueue *queue = GST_QUEUE (gst_pad_get_parent (pad));
GstPad *peer;
gboolean res;
GstPad *peer;
gboolean res;
- if (!(peer = gst_pad_get_peer (queue->sinkpad)))
+ if (G_UNLIKELY (queue == NULL))
+ if (!(peer = gst_pad_get_peer (queue->sinkpad))) {
+ gst_object_unref (queue);
+ return FALSE;
+ }
+
res = gst_pad_query (peer, query);
gst_object_unref (peer);
res = gst_pad_query (peer, query);
gst_object_unref (peer);
+ if (!res) {
+ gst_object_unref (queue);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
+ gst_object_unref (queue);
- queue = GST_QUEUE2 (GST_PAD_PARENT (pad));
+ queue = GST_QUEUE2 (gst_pad_get_parent (pad));
+ if (G_UNLIKELY (queue == NULL))
+ return FALSE;
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
+ gst_object_unref (queue);
return TRUE;
/* ERRORS */
peer_failed:
{
GST_DEBUG_OBJECT (queue, "failed peer query");
return TRUE;
/* ERRORS */
peer_failed:
{
GST_DEBUG_OBJECT (queue, "failed peer query");
+ gst_object_unref (queue);