]> git.sesse.net Git - vlc/commitdiff
macosx: Make sure the manageIntf: Timer is getting cancelled at exit.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Sat, 5 Jul 2008 00:14:17 +0000 (02:14 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Sat, 5 Jul 2008 00:14:17 +0000 (02:14 +0200)
modules/gui/macosx/intf.h
modules/gui/macosx/intf.m

index 4b5410564602e156b580e300f9cbf3ff0651c084..7ec3957ea24ea6e312e9682709422ace5800a80b 100644 (file)
@@ -307,6 +307,9 @@ struct intf_sys_t
     /* the manage thread */
     pthread_t manage_thread;
 
+    /* The timer that update the interface */
+    NSTimer * interfaceTimer;
+
     AppleRemote * o_remote;
     BOOL b_remote_button_hold; /* true as long as the user holds the left,right,plus or minus on the remote control */
 }
index 47387cb8031069226ff7b6087d6a9ccf7754dbad..95024568d2bf39b1ba940d354ae8035ad7b56f71 100644 (file)
@@ -778,9 +778,9 @@ static VLCMain *_o_sharedMainInstance = nil;
         forMode: NSDefaultRunLoopMode];
 
     /* FIXME: don't poll */
-    [NSTimer scheduledTimerWithTimeInterval: 0.5
+    interfaceTimer = [[NSTimer scheduledTimerWithTimeInterval: 0.5
                                      target: self selector: @selector(manageIntf:)
-                                   userInfo: nil repeats: FALSE];
+                                   userInfo: nil repeats: FALSE] retain];
 
     /* Note: we use the pthread API to support pre-10.5 */
     pthread_create( &manage_thread, NULL, ManageThread, self );
@@ -1443,9 +1443,11 @@ static VLCMain *_o_sharedMainInstance = nil;
     if( ((i_end_scroll != -1) && (mdate() > i_end_scroll)) || !p_input )
         [self resetScrollField];
 
-    [NSTimer scheduledTimerWithTimeInterval: 0.3
+    [interfaceTimer autorelease];
+
+    interfaceTimer = [[NSTimer scheduledTimerWithTimeInterval: 0.3
         target: self selector: @selector(manageIntf:)
-        userInfo: nil repeats: FALSE];
+        userInfo: nil repeats: FALSE] retain];
 }
 
 - (void)setupMenus
@@ -1765,6 +1767,11 @@ static VLCMain *_o_sharedMainInstance = nil;
     /* Make sure our manage_thread ends */
     pthread_join( manage_thread, NULL );
 
+    /* Make sure the interfaceTimer is destroyed */
+    [interfaceTimer invalidate];
+    [interfaceTimer release];
+    interfaceTimer = nil;
+
     /* make sure that the current volume is saved */
     config_PutInt( p_intf->p_libvlc, "volume", i_lastShownVolume );
     returnedValue = config_SaveConfigFile( p_intf->p_libvlc, "main" );