diff --git a/ClickToFlash.xcodeproj/project.pbxproj b/ClickToFlash.xcodeproj/project.pbxproj index 3c9b1ba7..b886a9e4 100755 --- a/ClickToFlash.xcodeproj/project.pbxproj +++ b/ClickToFlash.xcodeproj/project.pbxproj @@ -232,8 +232,10 @@ A494CC2B0F9F2446007D5EEB /* ctf.icns */, D9566C2B0F37EA0800358646 /* deSIFR Resources */, ); + indentWidth = 4; name = Plugin; sourceTree = ""; + tabWidth = 4; }; 55EB70550E04A8A40016593D /* Frameworks */ = { isa = PBXGroup; diff --git a/Plugin/CTFURLConnection.m b/Plugin/CTFURLConnection.m index aab8dafc..166a0f60 100644 --- a/Plugin/CTFURLConnection.m +++ b/Plugin/CTFURLConnection.m @@ -43,7 +43,8 @@ - (NSHTTPURLResponse *)getURLResponseHeaders:(NSURL *)URL [NSThread detachNewThreadSelector:@selector(startRequest:) toTarget:self withObject:request]; [request release]; - [theLock lockWhenCondition:1 beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]]; + [theLock lockWhenCondition:1]; + [theLock unlock]; if (error) (*error) = errorToReturn; return [responseToReturn autorelease]; @@ -67,12 +68,20 @@ - (void)startRequest:(NSURLRequest *)request; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; - [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]]; + + NSRunLoop *rl = [NSRunLoop currentRunLoop]; + + while ([rl runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { + if ([theLock tryLockWhenCondition:1]) { + [theLock unlock]; + break; + } + } + [connection release]; [request release]; [pool drain]; - } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; diff --git a/Plugin/Plugin.m b/Plugin/Plugin.m index 7d04024e..a7e66349 100755 --- a/Plugin/Plugin.m +++ b/Plugin/Plugin.m @@ -401,26 +401,35 @@ - (id) initWithArguments:(NSDictionary *)arguments return self; } -- (void) dealloc +- (void)webPlugInDestroy { - [self _removeTrackingAreaForCTF]; - [NSObject cancelPreviousPerformRequestsWithTarget:self]; + [self _removeTrackingAreaForCTF]; + [NSObject cancelPreviousPerformRequestsWithTarget:self]; [self _abortAlert]; // to be on the safe side // notify that this ClickToFlash plugin is going away - [[CTFMenubarMenuController sharedController] unregisterView: self]; - - [self setContainer:nil]; - [self setHost:nil]; - [self setWebView:nil]; - [self setBaseURL:nil]; - [self setAttributes:nil]; - - [_flashVars release]; - [_badgeText release]; - - [[NSNotificationCenter defaultCenter] removeObserver: self]; + [[CTFMenubarMenuController sharedController] unregisterView:self]; + + [self setContainer:nil]; + [self setHost:nil]; + [self setWebView:nil]; + [self setBaseURL:nil]; + [self setAttributes:nil]; + + [_flashVars release]; + _flashVars = nil; + [_badgeText release]; + _badgeText = nil; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void) dealloc +{ + // Just in case... + [self webPlugInDestroy]; + #if LOGGING_ENABLED NSLog(@"ClickToFlash:\tdealloc"); #endif