wpesrc: fix some caps leaks using the non-GL output
authorMatthew Waters <matthew@centricular.com>
Tue, 29 Sep 2020 13:46:00 +0000 (23:46 +1000)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 30 Sep 2020 12:10:44 +0000 (12:10 +0000)
Always chain up to the parent _stop() implementation as it unrefs some
caps (among other things).

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1409
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1618>

ext/wpe/gstwpesrc.cpp

index 94afd32..571619f 100644 (file)
@@ -330,15 +330,20 @@ gst_wpe_src_stop (GstBaseSrc * base_src)
 {
   GstWpeSrc *src = GST_WPE_SRC (base_src);
 
+  /* we can call this always, GstGLBaseSrc is smart enough to not crash if
+   * gst_gl_base_src_gl_start() has not been called from chaining up
+   * gst_wpe_src_decide_allocation() */
+  if (!GST_CALL_PARENT_WITH_DEFAULT(GST_BASE_SRC_CLASS, stop, (base_src), FALSE))
+    return FALSE;
+
   GST_OBJECT_LOCK (src);
 
-  if (src->gl_enabled) {
-    GST_OBJECT_UNLOCK (src);
-    // Let glbasesrc call our gl_stop() within its GL context.
-    return GST_CALL_PARENT_WITH_DEFAULT(GST_BASE_SRC_CLASS, stop, (base_src), FALSE);
-  }
+  /* if gl-enabled, gst_wpe_src_stop_unlocked() would have already been called
+   * inside gst_wpe_src_gl_stop() from the base class stopping the OpenGL
+   * context */
+  if (!src->gl_enabled)
+    gst_wpe_src_stop_unlocked (src);
 
-  gst_wpe_src_stop_unlocked (src);
   GST_OBJECT_UNLOCK (src);
   return TRUE;
 }