[vlc-devel] [PATCH] vout/macosx: simplify close and make sure all AppKit objects are released on the main thread

Felix Paul Kühne fkuehne at videolan.org
Tue Sep 17 22:12:42 CEST 2019


From: Felix Paul Kühne <felix at feepk.net>

Note that this does _not_ solve #22766.
---
 modules/video_output/macosx.m | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m
index 6290bbf763..5f618a0716 100644
--- a/modules/video_output/macosx.m
+++ b/modules/video_output/macosx.m
@@ -265,21 +265,20 @@ static void Close(vout_display_t *vd)
         [sys->glView setVoutDisplay:nil];
 
         var_Destroy (vd, "drawable-nsobject");
-        if ([(id)sys->container respondsToSelector:@selector(removeVoutSubview:)])
-        /* This will retain sys->glView */
-            [(id)sys->container performSelectorOnMainThread:@selector(removeVoutSubview:)
-                                                 withObject:sys->glView
-                                              waitUntilDone:NO];
-
-        /* release on main thread as explained in Open() */
-        [(id)sys->container performSelectorOnMainThread:@selector(release)
-                                             withObject:nil
-                                          waitUntilDone:NO];
-        [sys->glView performSelectorOnMainThread:@selector(removeFromSuperview)
-                                      withObject:nil
-                                   waitUntilDone:NO];
-
         var_Destroy(vlc_object_parent(vd), "macosx-glcontext");
+
+        dispatch_sync(dispatch_get_main_queue(), ^{
+            if ([(id)sys->container respondsToSelector:@selector(removeVoutSubview:)]) {
+                /* This will retain sys->glView */
+                [(id)sys->container removeVoutSubview:sys->glView];
+            }
+
+            /* release on main thread as explained in Open() */
+            [(id)sys->container release];
+            [sys->glView removeFromSuperview];
+            [sys->glView release];
+        });
+
         if (sys->vgl != NULL)
         {
             vlc_gl_MakeCurrent(sys->gl);
@@ -294,8 +293,6 @@ static void Close(vout_display_t *vd)
             vlc_object_delete(sys->gl);
         }
 
-        [sys->glView release];
-
         free (sys);
     }
 }
-- 
2.20.1 (Apple Git-117)



More information about the vlc-devel mailing list