Added checking to prevent cascading threads and server checks.
authorKent Sutherland <ksuther@ithinksw.com>
Sat, 19 Jun 2004 03:30:32 +0000 (03:30 +0000)
committerKent Sutherland <ksuther@ithinksw.com>
Sat, 19 Jun 2004 03:30:32 +0000 (03:30 +0000)
MainController.h
MainController.m
MenuController.m
iTunesRemote.m
libValidate.a

index 40887f9..f5c0834 100755 (executable)
@@ -43,8 +43,9 @@
     
     MTBlingController *bling;
     NSTimer *registerTimer;
-    BOOL timerUpdating;
+    BOOL timerUpdating, _checkingForServer;
     BOOL blinged;
+    NSLock *_serverCheckLock;
 }
 + (MainController *)sharedController;
 
index ecf39ba..65c718c 100755 (executable)
@@ -1138,7 +1138,15 @@ static MainController *sharedController;
 - (void)checkForRemoteServerAndConnectImmediately:(BOOL)connectImmediately
 {
     ITDebugLog(@"Checking for remote server.");
-    [NSThread detachNewThreadSelector:@selector(runRemoteServerCheck:) toTarget:self withObject:[NSNumber numberWithBool:connectImmediately]];
+    if (!_checkingForServer) {
+        if (!_serverCheckLock) {
+            _serverCheckLock = [[NSLock alloc] init];
+        }
+        [_serverCheckLock lock];
+        _checkingForServer = YES;
+        [_serverCheckLock unlock];
+        [NSThread detachNewThreadSelector:@selector(runRemoteServerCheck:) toTarget:self withObject:[NSNumber numberWithBool:connectImmediately]];
+    }
 }
 
 - (void)runRemoteServerCheck:(id)sender
@@ -1156,6 +1164,9 @@ static MainController *sharedController;
         ITDebugLog(@"Remote server not found.");
         [self performSelectorOnMainThread:@selector(remoteServerNotFound:) withObject:nil waitUntilDone:NO];
     }
+    [_serverCheckLock lock];
+    _checkingForServer = NO;
+    [_serverCheckLock unlock];
     [pool release];
 }
 
@@ -1288,6 +1299,7 @@ static MainController *sharedController;
     [statusWindowController release];
     [menuController release];
     [networkController release];
+    [_serverCheckLock release];
     [super dealloc];
 }
 
index a8e79e4..998cf20 100755 (executable)
         [[MainController sharedController] networkError:localException];
     NS_ENDHANDLER
     ITDebugLog(@"Releasing old submenus.");
+    ITDebugLog(@" - Rating menu");
     [_ratingMenu release];
+    ITDebugLog(@" - Upcoming songs menu");
     [_upcomingSongsMenu release];
+    ITDebugLog(@" - Playlists menu");
     [_playlistsMenu release];
+    ITDebugLog(@" - EQ menu");
     [_eqMenu release];
     ITDebugLog(@"Beginning Rebuild of \"Song Rating\" submenu.");
     _ratingMenu = [self ratingMenu];
index ae430a7..b4a745c 100755 (executable)
     ITDebugLog(@"Getting equalizer enabled status.");
     int thingy = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"'----':obj { form:type('prop'), want:type('prop'), seld:type('pEQ '), from:() }" eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
     ITDebugLog(@"Done getting equalizer enabled status.");
-    return thingy;
+    return (thingy != 0) ? YES : NO;
 }
 
 - (BOOL)setEqualizerEnabled:(BOOL)enabled
index a3d44e3..e2b3435 100755 (executable)
Binary files a/libValidate.a and b/libValidate.a differ