From e99affac7104922a5700a1a26a2f8aeabbac06ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 25 Apr 2018 01:33:43 +0300 Subject: [PATCH] gl/cocoa: Let ARC clean up our dispatch queue if ARC is used, and otherwise do it manually Also don't use __bridge casts if ARC is not used, as is the case on 32 bit systems. --- gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m index ce101ac3ff..1aecf09c16 100644 --- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m +++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m @@ -137,14 +137,27 @@ gst_gl_window_cocoa_init (GstGLWindowCocoa * window) window->priv->preferred_width = 320; window->priv->preferred_height = 240; +#if OS_OBJECT_USE_OBJC window->priv->gl_queue = (__bridge_retained gpointer) (dispatch_queue_create ("org.freedesktop.gstreamer.glwindow", NULL)); +#else + window->priv->gl_queue = (gpointer) + (dispatch_queue_create ("org.freedesktop.gstreamer.glwindow", NULL)); +#endif } static void gst_gl_window_cocoa_finalize (GObject * object) { GstGLWindowCocoa *window = GST_GL_WINDOW_COCOA (object); + +#if OS_OBJECT_USE_OBJC + /* Let ARC clean up our queue */ + dispatch_queue_t queue = (__bridge_transfer dispatch_queue_t) window->priv->gl_queue; +#else + dispatch_release (window->priv->gl_queue); +#endif + window->priv->gl_queue = NULL; G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -431,7 +444,11 @@ gst_gl_window_cocoa_send_message_async (GstGLWindow * window, GstGLContext *context = gst_gl_window_get_context (window); GThread *thread = gst_gl_context_get_thread (context); GstGLWindowCocoaPrivate *priv = window_cocoa->priv; +#if OS_OBJECT_USE_OBJC dispatch_queue_t gl_queue = (__bridge dispatch_queue_t)priv->gl_queue; +#else + dispatch_queue_t gl_queue = (dispatch_queue_t)priv->gl_queue; +#endif if (thread == g_thread_self()) { /* this case happens for nested calls happening from inside the GCD queue */