From b003387526d895f46477c48d3788f353147445a6 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Tue, 29 Sep 2020 23:46:00 +1000 Subject: [PATCH] wpesrc: fix some caps leaks using the non-GL output 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: --- ext/wpe/gstwpesrc.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/ext/wpe/gstwpesrc.cpp b/ext/wpe/gstwpesrc.cpp index 94afd322ba..571619f419 100644 --- a/ext/wpe/gstwpesrc.cpp +++ b/ext/wpe/gstwpesrc.cpp @@ -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; }