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 f03cdcec..66562c4a 100644 --- a/Plugin/CTFURLConnection.m +++ b/Plugin/CTFURLConnection.m @@ -36,7 +36,9 @@ - (NSHTTPURLResponse *)getURLResponseHeaders:(NSURL *)URL [request release]; [theLock lockWhenCondition:1]; + [theLock unlock]; if (error) (*error) = errorToReturn; + return [responseToReturn autorelease]; } @@ -53,25 +55,29 @@ + (NSHTTPURLResponse *)getURLResponseHeaders:(NSURL *)URL - (void)startRequest:(NSURLRequest *)request; { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [request retain]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; - [[NSRunLoop currentRunLoop] run]; + + 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; { - - [theLock tryLock]; + [theLock lock]; errorToReturn = error; [theLock unlockWithCondition:1]; @@ -79,8 +85,7 @@ - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)err - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)theResponse; { - - [theLock tryLock]; + [theLock lock]; // we cancel here, because otherwise NSURLConnection will continue to download // data due to a bug; even though we made a HEAD request, it still downloads @@ -93,8 +98,7 @@ - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLRe - (void)connectionDidFinishLoading:(NSURLConnection *)connection; { - - [theLock tryLock]; + [theLock lock]; [theLock unlockWithCondition:1]; } diff --git a/Plugin/Plugin.m b/Plugin/Plugin.m index b0dbb4ce..fbaeba76 100755 --- a/Plugin/Plugin.m +++ b/Plugin/Plugin.m @@ -381,26 +381,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