summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorJulien Isorce <j.isorce@samsung.com>2015-06-01 12:58:11 +0100
committerJulien Isorce <j.isorce@samsung.com>2015-06-01 14:09:34 +0100
commitd843b9e8c3119fe92a6a583860aa6f771cdc217c (patch)
tree726cdb908b7f17083f0fb84512f87b21fed4e5ec /gst-libs
parent5fe88f7ed781f1f9acddb78f6ce57dfafe8d335a (diff)
downloadgstreamer-plugins-bad-d843b9e8c3119fe92a6a583860aa6f771cdc217c.tar.gz
glwindow: move main loop/context creation back to init/finalize
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=750199
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/gl/gstglwindow.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
index 6e7453fac..403eed65b 100644
--- a/gst-libs/gst/gl/gstglwindow.c
+++ b/gst-libs/gst/gl/gstglwindow.c
@@ -137,13 +137,15 @@ gst_gl_window_default_open (GstGLWindow * window, GError ** error)
GstGLWindowPrivate *priv = window->priv;
if (g_main_context_get_thread_default ()) {
+ if (priv->main_context)
+ g_main_context_unref (priv->main_context);
+ if (priv->loop)
+ g_main_loop_unref (priv->loop);
priv->main_context = g_main_context_ref_thread_default ();
priv->loop = NULL;
priv->alive = TRUE;
} else {
- priv->main_context = g_main_context_new ();
g_main_context_push_thread_default (priv->main_context);
- priv->loop = g_main_loop_new (priv->main_context, FALSE);
}
return TRUE;
@@ -154,14 +156,13 @@ gst_gl_window_default_close (GstGLWindow * window)
{
GstGLWindowPrivate *priv = window->priv;
- if (priv->loop)
- g_main_loop_unref (priv->loop);
- else
+ if (!priv->loop) {
priv->alive = FALSE;
-
- g_main_context_pop_thread_default (priv->main_context);
-
- g_main_context_unref (priv->main_context);
+ g_main_context_unref (priv->main_context);
+ priv->main_context = NULL;
+ } else {
+ g_main_context_pop_thread_default (priv->main_context);
+ }
}
static void
@@ -179,7 +180,8 @@ _init_debug (void)
static void
gst_gl_window_init (GstGLWindow * window)
{
- window->priv = GST_GL_WINDOW_GET_PRIVATE (window);
+ GstGLWindowPrivate *priv = GST_GL_WINDOW_GET_PRIVATE (window);
+ window->priv = priv;
g_mutex_init (&window->lock);
g_mutex_init (&window->nav_lock);
@@ -190,6 +192,9 @@ gst_gl_window_init (GstGLWindow * window)
window->is_drawing = FALSE;
g_weak_ref_init (&window->context_ref, NULL);
+
+ priv->main_context = g_main_context_new ();
+ priv->loop = g_main_loop_new (priv->main_context, FALSE);
}
static void
@@ -321,6 +326,7 @@ static void
gst_gl_window_finalize (GObject * object)
{
GstGLWindow *window = GST_GL_WINDOW (object);
+ GstGLWindowPrivate *priv = window->priv;
if (window->nav_alive) {
g_mutex_lock (&window->nav_lock);
@@ -332,6 +338,12 @@ gst_gl_window_finalize (GObject * object)
g_mutex_unlock (&window->nav_lock);
}
+ if (priv->loop)
+ g_main_loop_unref (priv->loop);
+
+ if (priv->main_context)
+ g_main_context_unref (priv->main_context);
+
g_weak_ref_clear (&window->context_ref);
g_mutex_clear (&window->lock);