From 782fb43887ad5377c3dbc57f65ead1cd62cab18d Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Mon, 3 Oct 2016 13:11:07 +0100 Subject: [PATCH] glvideomixer: fix vertex_buffer leak We call the base class first as this will remove the pad from the aggregator, thus stopping misc callbacks from being called, one of which (process_textures) will recreate the vertex_buffer if it is destroyed https://bugzilla.gnome.org/show_bug.cgi?id=760873 --- ext/gl/gstglvideomixer.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ext/gl/gstglvideomixer.c b/ext/gl/gstglvideomixer.c index 487bf2fe16..78b5d06c51 100644 --- a/ext/gl/gstglvideomixer.c +++ b/ext/gl/gstglvideomixer.c @@ -841,14 +841,20 @@ static void gst_gl_video_mixer_release_pad (GstElement * element, GstPad * p) { GstGLVideoMixerPad *pad = GST_GL_VIDEO_MIXER_PAD (p); + + /* we call the base class first as this will remove the pad from + * the aggregator, thus stopping misc callbacks from being called, + * one of which (process_textures) will recreate the vertex_buffer + * if it is destroyed */ + GST_ELEMENT_CLASS (g_type_class_peek_parent (G_OBJECT_GET_CLASS (element))) + ->release_pad (element, p); + if (pad->vertex_buffer) { GstGLBaseMixer *mix = GST_GL_BASE_MIXER (element); gst_gl_context_thread_add (mix->context, (GstGLContextThreadFunc) _del_buffer, &pad->vertex_buffer); pad->vertex_buffer = 0; } - GST_ELEMENT_CLASS (g_type_class_peek_parent (G_OBJECT_GET_CLASS (element))) - ->release_pad (element, p); } static void