diff --git a/gst-libs/gst/gl/gstglslstage.c b/gst-libs/gst/gl/gstglslstage.c index 2b08adb2d6b..3e2d0e49912 100644 --- a/gst-libs/gst/gl/gstglslstage.c +++ b/gst-libs/gst/gl/gstglslstage.c @@ -74,12 +74,24 @@ G_DEFINE_TYPE_WITH_CODE (GstGLSLStage, gst_glsl_stage, GST_TYPE_OBJECT, GST_DEBUG_CATEGORY_INIT (gst_glsl_stage_debug, "glslstage", 0, "GLSL Stage");); +static void +_delete_shader (GstGLContext * context, GstGLSLStage * stage) +{ + GstGLSLStagePrivate *priv = stage->priv; + + if (priv->handle) + priv->vtable.DeleteShader (priv->handle); +} + static void gst_glsl_stage_finalize (GObject * object) { GstGLSLStage *stage = GST_GLSL_STAGE (object); gint i; + gst_gl_context_thread_add (stage->context, + (GstGLContextThreadFunc) _delete_shader, stage); + if (stage->context) { gst_object_unref (stage->context); stage->context = NULL;