I am seeing a deadlock I think... It works in the debugger, but hangs when running alone. The killThread is called as part of the applicationWillTerminate delegate method.
My thought is that somehow after blocking to wait for kConditionThreadIdle, my performSelectorOnMainThread is getting called. When this happens, it gets stuck because the main thread is already blocked. Perhaps after calling if (![self threadMustExit]), but before dispatching to the main thread? Does anyone have any thoughts on this or a good way to prevent it? Trygve -(void)awakeFromNib { lock = [[NSConditionLock alloc] initWithCondition:kConditionThreadRunning]; [NSThread detachNewThreadSelector:@selector(threadMethod:) toTarget:self withObject:self]; } - (void)threadMethod:(id)anObject { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; while (1) { if (![self threadMustExit]) [self doStuff]; if (![self threadMustExit]) [self performSelectorOnMainThread:@selector(doThreadUnsafeStuff) withObject:nil waitUntilDone:YES]; if ([lock lockWhenCondition:kConditionThreadMustExit) { [lock unlock]; break; } } [lock lock]; [lock unlockWithCondition:kConditionThreadIdle]; [pool release]; } - (BOOL)threadMustExit { [lock lock]; BOOL threadMustExit = ([lock condition] == kConditionThreadMustExit); [lock unlock]; return (threadMustExit); } -(void)killThread { [lock lock]; if ([lock condition] == kConditionThreadRunning) { // instruct thread to exit [lock unlockWithCondition:kConditionThreadMustExit]; // Wait for thread to exit [lock lockWhenCondition:kConditionThreadIdle]; [lock unlock]; } else [lock unlock]; } _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]