glimagesink: If creating a context or upload failed, destroy it

Fixes deadlocks in error cases when later code assumes the broken
context is actually usable.

https://bugzilla.gnome.org/show_bug.cgi?id=728761
This commit is contained in:
Sebastian Dröge 2014-04-23 10:00:48 +02:00 committed by Tim-Philipp Müller
parent f230f758e7
commit 2b38f86b4e

View file

@ -422,8 +422,10 @@ _ensure_gl_setup (GstGLImageSink * gl_sink)
}
if (!gst_gl_context_create (gl_sink->context, gl_sink->other_context,
&error))
&error)) {
g_object_unref (window);
goto context_error;
}
/* setup callbacks */
gst_gl_window_set_resize_callback (window,
@ -436,7 +438,7 @@ _ensure_gl_setup (GstGLImageSink * gl_sink)
GST_GL_WINDOW_CB (gst_glimage_sink_on_close),
gst_object_ref (gl_sink), (GDestroyNotify) gst_object_unref);
gst_object_unref (window);
g_object_unref (window);
}
if (!gl_sink->upload) {
@ -451,12 +453,16 @@ upload_error:
{
GST_ELEMENT_ERROR (gl_sink, RESOURCE, NOT_FOUND, ("Failed to init upload"),
(NULL));
g_object_unref (gl_sink->upload);
gl_sink->upload = NULL;
return FALSE;
}
context_error:
{
GST_ELEMENT_ERROR (gl_sink, RESOURCE, NOT_FOUND, ("%s", error->message),
(NULL));
g_object_unref (gl_sink->context);
gl_sink->context = NULL;
return FALSE;
}
}