]> git.sesse.net Git - vlc/commitdiff
minimal_macosx: Make sure we actually kill the vout at some point.
authorPierre d'Herbemont <pdherbemont@free.fr>
Wed, 26 Aug 2009 21:24:45 +0000 (23:24 +0200)
committerPierre d'Herbemont <pdherbemont@free.fr>
Wed, 26 Aug 2009 21:26:02 +0000 (23:26 +0200)
modules/gui/minimal_macosx/VLCOpenGLVoutView.m
modules/gui/minimal_macosx/voutgl.m

index bb3b1c529f470ae6c7443aa8b04004cb6c7b215d..38ee22f6c61518f9324cae568ff84b5dd96102b5 100644 (file)
@@ -80,6 +80,9 @@ void cocoaglvoutviewEnd( vout_thread_t * p_vout )
 {
     id <VLCOpenGLVoutEmbedding> o_cocoaglview_container;
 
+    if (!p_vout->p_sys->o_glview)
+        return;
+
     msg_Dbg( p_vout, "Mac OS X Vout is closing" );
     var_Destroy( p_vout, "drawable-nsobject" );
 
@@ -89,15 +92,15 @@ void cocoaglvoutviewEnd( vout_thread_t * p_vout )
     [p_vout->p_sys->o_glview detachFromVout];
     msg_Dbg( p_vout, "Mac OS X Vout is closing" );
 
-    /* Let the view go, _without_blocking_ */
-    [p_vout->p_sys->o_glview performSelectorOnMainThread:@selector(removeFromSuperview) withObject:NULL waitUntilDone:NO];
-
     if( [(id)o_cocoaglview_container respondsToSelector:@selector(removeVoutSubview:)] )
-        [o_cocoaglview_container removeVoutSubview: p_vout->p_sys->o_glview];
+        [o_cocoaglview_container performSelectorOnMainThread:@selector(removeVoutSubview:) withObject:p_vout->p_sys->o_glview waitUntilDone:NO];
 
-    [p_vout->p_sys->o_glview release];
+    /* Let the view go and release it, _without_blocking_ */
+    [p_vout->p_sys->o_glview performSelectorOnMainThread:@selector(removeFromSuperviewAndRelease) withObject:nil waitUntilDone:NO];
+    p_vout->p_sys->o_glview = nil;
 
     [p_vout->p_sys->o_pool release];
+    p_vout->p_sys->o_pool = nil;
  
 }
 
@@ -219,12 +222,12 @@ void cocoaglvoutviewUnlock( vout_thread_t * p_vout )
     [super dealloc];
 }
 
-- (void)removeFromSuperview
+- (void)removeFromSuperviewAndRelease
 {
-    [super removeFromSuperview];
+    [self removeFromSuperview];
+    [self release];
 }
 
-
 - (id) initWithVout: (vout_thread_t *) vout container: (id <VLCOpenGLVoutEmbedding>) aContainer
 {
     NSOpenGLPixelFormatAttribute attribs[] =
index 2fd0f41a545b721cfeccab49df4740218576cde4..6daabe3644284994a24cb16a17d5f9f594914899 100644 (file)
@@ -98,6 +98,7 @@ int OpenVideoGL  ( vlc_object_t * p_this )
 void CloseVideoGL ( vlc_object_t * p_this )
 {
     vout_thread_t * p_vout = (vout_thread_t *) p_this;
+    cocoaglvoutviewEnd( p_vout );
     /* Clean up */
     free( p_vout->p_sys );
 }