mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-01 22:21:13 +00:00
glvideomixer: hold extra pad ref while calling parent
Our subsequent cleanup needs a ref on the pad and calling the parent may release the last reference and could cause a use-after-free. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1187>
This commit is contained in:
parent
f647840685
commit
3bbcfe9c23
1 changed files with 4 additions and 1 deletions
|
@ -881,7 +881,9 @@ gst_gl_video_mixer_release_pad (GstElement * element, GstPad * p)
|
||||||
/* we call the base class first as this will remove the pad from
|
/* we call the base class first as this will remove the pad from
|
||||||
* the aggregator, thus stopping misc callbacks from being called,
|
* the aggregator, thus stopping misc callbacks from being called,
|
||||||
* one of which (process_textures) will recreate the vertex_buffer
|
* one of which (process_textures) will recreate the vertex_buffer
|
||||||
* if it is destroyed */
|
* if it is destroyed. Calling the parent may release the last ref to the pad
|
||||||
|
* so we need to keep the pad alive for the follow up clean up */
|
||||||
|
gst_object_ref (pad);
|
||||||
GST_ELEMENT_CLASS (g_type_class_peek_parent (G_OBJECT_GET_CLASS (element)))
|
GST_ELEMENT_CLASS (g_type_class_peek_parent (G_OBJECT_GET_CLASS (element)))
|
||||||
->release_pad (element, p);
|
->release_pad (element, p);
|
||||||
|
|
||||||
|
@ -891,6 +893,7 @@ gst_gl_video_mixer_release_pad (GstElement * element, GstPad * p)
|
||||||
_del_buffer, &pad->vertex_buffer);
|
_del_buffer, &pad->vertex_buffer);
|
||||||
pad->vertex_buffer = 0;
|
pad->vertex_buffer = 0;
|
||||||
}
|
}
|
||||||
|
gst_object_unref (pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue