From 6b1fa09077b45541781913bcbd59493048d720f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 15 May 2017 12:00:50 +0300 Subject: [PATCH] glshader: Make reference counting of attach() consistent https://bugzilla.gnome.org/show_bug.cgi?id=747990 https://bugzilla.gnome.org/show_bug.cgi?id=702960 --- gst-libs/gst/gl/gstglshader.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c index c15568dbcb..ab348f1632 100644 --- a/gst-libs/gst/gl/gstglshader.c +++ b/gst-libs/gst/gl/gstglshader.c @@ -500,7 +500,7 @@ gst_gl_shader_detach (GstGLShader * shader, GstGLSLStage * stage) /** * gst_gl_shader_attach_unlocked: * @shader: a #GstGLShader - * @stage: a #GstGLSLStage to attach + * @stage: (transfer floating): a #GstGLSLStage to attach * * Attaches @stage to @shader. @stage must have been successfully compiled * with gst_glsl_stage_compile(). @@ -521,18 +521,28 @@ gst_gl_shader_attach_unlocked (GstGLShader * shader, GstGLSLStage * stage) if (!_gst_glsl_funcs_fill (&shader->priv->vtable, shader->context)) { GST_WARNING_OBJECT (shader, "Failed to retreive required GLSL functions"); + gst_object_ref_sink (stage); + gst_object_unref (stage); return FALSE; } - if (!_ensure_program (shader)) + if (!_ensure_program (shader)) { + gst_object_ref_sink (stage); + gst_object_unref (stage); return FALSE; + } /* already attached? */ - if (g_list_find (shader->priv->stages, stage)) + if (g_list_find (shader->priv->stages, stage)) { + gst_object_ref_sink (stage); + gst_object_unref (stage); return TRUE; + } stage_handle = gst_glsl_stage_get_handle (stage); if (!stage_handle) { + gst_object_ref_sink (stage); + gst_object_unref (stage); return FALSE; } @@ -555,7 +565,7 @@ gst_gl_shader_attach_unlocked (GstGLShader * shader, GstGLSLStage * stage) /** * gst_gl_shader_attach: * @shader: a #GstGLShader - * @stage: a #GstGLSLStage to attach + * @stage: (transfer floating): a #GstGLSLStage to attach * * Attaches @stage to @shader. @stage must have been successfully compiled * with gst_glsl_stage_compile().