[vlc-commits] vout/macosx: simplify close

Felix Paul Kühne git at videolan.org
Thu Sep 19 18:52:43 CEST 2019


vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Tue Sep 17 22:12:08 2019 +0200| [b2250de24ac67ae25fdc80c81f12f6528558fb44] | committer: Felix Paul Kühne

vout/macosx: simplify close

Make sure all that AppKit objects are released on the main thread

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b2250de24ac67ae25fdc80c81f12f6528558fb44
---

 modules/video_output/macosx.m | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m
index 6290bbf763..edc793b2d5 100644
--- a/modules/video_output/macosx.m
+++ b/modules/video_output/macosx.m
@@ -265,21 +265,8 @@ 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");
+
         if (sys->vgl != NULL)
         {
             vlc_gl_MakeCurrent(sys->gl);
@@ -294,7 +281,19 @@ static void Close(vout_display_t *vd)
             vlc_object_delete(sys->gl);
         }
 
-        [sys->glView release];
+        VLCOpenGLVideoView *glView = sys->glView;
+        id<VLCVideoViewEmbedding> viewContainer = sys->container;
+        dispatch_async(dispatch_get_main_queue(), ^{
+            if ([viewContainer respondsToSelector:@selector(removeVoutSubview:)]) {
+                /* This will retain sys->glView */
+                [viewContainer removeVoutSubview:sys->glView];
+            }
+
+            /* release on main thread as explained in Open() */
+            [viewContainer release];
+            [glView removeFromSuperview];
+            [glView release];
+        });
 
         free (sys);
     }



More information about the vlc-commits mailing list