mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-05 15:08:48 +00:00
glimagesink: avoid a possible critical on shutdown
It is possible that the close callback can be called after glimagesink is changing state to NULL. Protect against that by taking the glimagesink lock and some NULL checking. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6566>
This commit is contained in:
parent
84acc6a6d3
commit
b7b2b80de1
1 changed files with 18 additions and 13 deletions
|
@ -2485,25 +2485,30 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink)
|
|||
static void
|
||||
gst_glimage_sink_on_close (GstGLImageSink * gl_sink)
|
||||
{
|
||||
GstGLWindow *window;
|
||||
GstGLWindow *window = NULL;
|
||||
|
||||
GST_WARNING_OBJECT (gl_sink, "Output window was closed");
|
||||
|
||||
window = gst_gl_context_get_window (gl_sink->context);
|
||||
GST_GLIMAGE_SINK_LOCK (gl_sink);
|
||||
if (gl_sink->context)
|
||||
window = gst_gl_context_get_window (gl_sink->context);
|
||||
GST_GLIMAGE_SINK_UNLOCK (gl_sink);
|
||||
|
||||
if (gl_sink->key_sig_id)
|
||||
g_signal_handler_disconnect (window, gl_sink->key_sig_id);
|
||||
gl_sink->key_sig_id = 0;
|
||||
if (gl_sink->mouse_sig_id)
|
||||
g_signal_handler_disconnect (window, gl_sink->mouse_sig_id);
|
||||
gl_sink->mouse_sig_id = 0;
|
||||
if (gl_sink->mouse_scroll_sig_id)
|
||||
g_signal_handler_disconnect (window, gl_sink->mouse_scroll_sig_id);
|
||||
gl_sink->mouse_scroll_sig_id = 0;
|
||||
if (window) {
|
||||
if (gl_sink->key_sig_id)
|
||||
g_signal_handler_disconnect (window, gl_sink->key_sig_id);
|
||||
gl_sink->key_sig_id = 0;
|
||||
if (gl_sink->mouse_sig_id)
|
||||
g_signal_handler_disconnect (window, gl_sink->mouse_sig_id);
|
||||
gl_sink->mouse_sig_id = 0;
|
||||
if (gl_sink->mouse_scroll_sig_id)
|
||||
g_signal_handler_disconnect (window, gl_sink->mouse_scroll_sig_id);
|
||||
gl_sink->mouse_scroll_sig_id = 0;
|
||||
|
||||
gst_object_unref (window);
|
||||
}
|
||||
|
||||
g_atomic_int_set (&gl_sink->to_quit, 1);
|
||||
|
||||
gst_object_unref (window);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
Loading…
Reference in a new issue