macosx: Make sure we don't leak an input_thread_t.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Sat, 5 Jul 2008 17:32:50 +0000 (19:32 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Sat, 5 Jul 2008 17:48:38 +0000 (19:48 +0200)
modules/gui/macosx/intf.h
modules/gui/macosx/intf.m

index 6fe2489..3dbe618 100644 (file)
@@ -67,9 +67,6 @@ struct intf_sys_t
 {
     NSAutoreleasePool * o_pool;
 
-    /* the current input */
-    input_thread_t * p_input;
-
     /* special actions */
     bool b_mute;
     int i_play_status;
index 639cf27..f2ee386 100644 (file)
@@ -1132,6 +1132,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 - (void)manage
 {
     playlist_t * p_playlist;
+    input_thread_t * p_input = NULL;
 
     /* new thread requires a new pool */
     NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init];
@@ -1153,25 +1154,25 @@ static VLCMain *_o_sharedMainInstance = nil;
     {
         vlc_mutex_lock( &p_intf->change_lock );
 
-        if( p_intf->p_sys->p_input == NULL )
+        if( !p_input )
         {
-            p_intf->p_sys->p_input = playlist_CurrentInput( p_playlist );
+            p_input = playlist_CurrentInput( p_playlist );
 
             /* Refresh the interface */
-            if( p_intf->p_sys->p_input )
+            if( p_input )
             {
                 msg_Dbg( p_intf, "input has changed, refreshing interface" );
                 p_intf->p_sys->b_input_update = true;
             }
         }
-        else if( !vlc_object_alive (p_intf->p_sys->p_input) || p_intf->p_sys->p_input->b_dead )
+        else if( !vlc_object_alive (p_input) || p_input->b_dead )
         {
             /* input stopped */
             p_intf->p_sys->b_intf_update = true;
             p_intf->p_sys->i_play_status = END_S;
             msg_Dbg( p_intf, "input has stopped, refreshing interface" );
-            vlc_object_release( p_intf->p_sys->p_input );
-            p_intf->p_sys->p_input = NULL;
+            vlc_object_release( p_input );
+            p_input = NULL;
         }
 
         /* Manage volume status */
@@ -1184,6 +1185,8 @@ static VLCMain *_o_sharedMainInstance = nil;
     vlc_object_unlock( p_intf );
     [o_pool release];
 
+    if( p_input ) vlc_object_release( p_input );
+
     var_DelCallback( p_playlist, "playlist-current", PlaylistChanged, self );
     var_DelCallback( p_playlist, "intf-change", PlaylistChanged, self );
     var_DelCallback( p_playlist, "item-change", PlaylistChanged, self );