uridecodebin3: Fix shutdown procedures in probe
authorEdward Hervey <edward@centricular.com>
Tue, 9 Aug 2022 08:42:22 +0000 (10:42 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 23 Nov 2022 12:19:21 +0000 (12:19 +0000)
When shutting down, we want to remove the urisourcebin blocking probes ... but
we also want to propagate a GST_FLOW_FLUSHING upstream (and not
GST_FLOW_NOT_LINKED) to make the upstream task gracefully stop instead of
posting an error message.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3457>

subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c

index 3750a01..7324571 100644 (file)
@@ -1255,8 +1255,15 @@ uri_src_block_probe (GstPad * pad, GstPadProbeInfo * info,
 shutdown:
   {
     GST_LOG_OBJECT (pad, "Shutting down");
+    /* We are shutting down, we both want to remove this probe and propagate a
+     * GST_FLOW_FLUSHING upstream (to cause tasks to stop) */
+    if (srcpad->block_probe_id)
+      gst_pad_remove_probe (pad, srcpad->block_probe_id);
+    srcpad->block_probe_id = 0;
     PLAY_ITEMS_UNLOCK (handler->uridecodebin);
-    return GST_PAD_PROBE_REMOVE;
+    GST_PAD_PROBE_INFO_FLOW_RETURN (info) = GST_FLOW_FLUSHING;
+    gst_mini_object_unref (GST_PAD_PROBE_INFO_DATA (info));
+    return GST_PAD_PROBE_HANDLED;
   }
 }