Re: Blocked in NSFileCoordinator
Re: Blocked in NSFileCoordinator
- Subject: Re: Blocked in NSFileCoordinator
- From: Kyle Sluder <email@hidden>
- Date: Mon, 29 Aug 2011 08:05:34 -0700
Saving during loading will now deadlock on Lion, since you're trying to do a coordinated write while NSDocumentController still has a coordinated read on your file. Don't save while loading.
Does -takkeEvent: happen in response to NSUndoManager notifications? Something could be poking the NSUndoManager.
--Kyle Sluder
On Aug 28, 2011, at 11:44 PM, "Gerriet M. Denkmann" <email@hidden> wrote:
> I have a document based app which collects data and updates its document.
> Works fine in Snow Leopard, hangs in Lion.
>
> At start it blocks (see sample at end of post).
> This initial hang can be avoided, if for the first 3 seconds after launch no saves are allowed. (Rather a crude hack).
> But even then, it usually will hang some time later (maybe a long time later - hard to reproduce).
>
> I guess that Lion tries to restore some windows which interferes with my own calls to saveDocument:.
>
>
> MyDocument is a subclass of NSDocument.
> Overridden NSDocument methods are:
> - (id)init
> - (id)initWithType:(NSString *)typeName error:(NSError **)outError
> - (void)dealloc
> - (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
> - (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)outError
> - (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
> - (void)close
> all of these contain log statements.
> some more:
> - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel
> - (NSString *)windowNibName
> - (void)windowControllerDidLoadNib:(NSWindowController *) aController
>
> The ap starts like this:
> - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
> {
> // ....
> NSDocumentController *sDC = [ NSDocumentController sharedDocumentController ];
> NSError *outError ;
> activeDoc = [ sDC openDocumentWithContentsOfURL: absoluteURL display: YES error: &outError ];
> if ( activeDoc == nil ) // error handling (no error did happen)
> }
>
> creates these logs:
> 2011-08-29 13:00:38.396 EnTeP[4982:707] -[MyDocument init] self <MyDocument: 0x1005278f0>
> 2011-08-29 13:00:38.399 EnTeP[4982:707] -[MyDocument readFromURL:ofType:error:] self <MyDocument: 0x1005278f0>
> 2011-08-29 13:00:38.402 EnTeP[4982:707] -[MyDocument readFromURL:ofType:error:] done
>
>
> Then something happens and this code gets executed:
>
> - (BOOL)takkeEvent: (EvenT *)eve ;
> {
> // do something then:
> NSLog(@"%s will save",__FUNCTION__);
> [ self saveDocument: nil ];
> NSLog(@"%s did save",__FUNCTION__); ← Note: never gets to here
> }
>
> which writes this log line, and then hangs forever:
> 2011-08-29 13:00:41.417 EnTeP[4982:707] -[MyDocument takkeEvent:] will save
>
>
> How do I debug this (I'm rather new to Lion)?
>
>
> And here is the sample, taken by Activity Monitor:
>
> OS Version: Mac OS X 10.7.1 (11B26)
> Report Version: 7
>
> Call graph:
> 2678 Thread_175770 DispatchQueue_1: com.apple.main-thread (serial)
> + 2678 start (in EnTeP) + 52 [0x100001464]
> + 2678 main (in EnTeP) + 34 [0x100001492] main.m:13
> + 2678 NSApplicationMain (in AppKit) + 867 [0x7fff9234652a]
> + 2678 -[NSApplication run] (in AppKit) + 463 [0x7fff920c83d6]
> + 2678 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in AppKit) + 135 [0x7fff920cba95]
> + 2678 _DPSNextEvent (in AppKit) + 1247 [0x7fff920cc3dd]
> + 2678 AEProcessAppleEvent (in HIToolbox) + 102 [0x7fff8f9cb12d]
> + 2678 aeProcessAppleEvent (in AE) + 250 [0x7fff9381e857]
> + 2678 _ZL25dispatchEventAndSendReplyPK6AEDescPS_ (in AE) + 38 [0x7fff9381e963]
> + 2678 aeDispatchAppleEvent(AEDesc const*, AEDesc*, unsigned int, unsigned char*) (in AE) + 200 [0x7fff9381ea85]
> + 2678 _NSAppleEventManagerGenericHandler (in Foundation) + 105 [0x7fff8e30afdc]
> + 2678 -[NSAppleEventManager dispatchRawAppleEvent:withRawReply:handlerRefCon:] (in Foundation) + 283 [0x7fff8e30b14e]
> + 2678 __-[NSAppleEventManager setEventHandler:andSelector:forEventClass:andEventID:]_block_invoke_1 (in Foundation) + 101 [0x7fff8e30c1c7]
> + 2678 -[NSObject performSelector:withObject:withObject:] (in CoreFoundation) + 65 [0x7fff98ceaf51]
> + 2678 -[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:] (in AppKit) + 330 [0x7fff920cefb1]
> + 2678 -[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:] (in AppKit) + 242 [0x7fff920cf250]
> + 2678 -[NSApplication _sendFinishLaunchingNotification] (in AppKit) + 78 [0x7fff920d04df]
> + 2678 -[NSApplication _postDidFinishNotification] (in AppKit) + 212 [0x7fff920d0779]
> + 2678 -[NSNotificationCenter postNotificationName:object:userInfo:] (in Foundation) + 65 [0x7fff8e2d59cb]
> + 2678 _CFXNotificationPost (in CoreFoundation) + 2634 [0x7fff98ca151a]
> + 2678 __-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_1 (in Foundation) + 47 [0x7fff8e2e9716]
> + 2678 -[FeuchtDel applicationDidFinishLaunching:] (in EnTeP) + 3264 [0x100002570] FeuchtDel.m:778
> + 2678 -[FeuchtDel takeEvent:] (in EnTeP) + 59 [0x1000035fb] FeuchtDel.m:1597
> + 2678 -[MyDocument takkeEvent:] (in EnTeP) + 1654 [0x1000196e6] MyDocument.m:1063
> + 2678 -[NSDocument saveDocumentWithDelegate:didSaveSelector:contextInfo:] (in AppKit) + 92 [0x7fff9246ae33]
> + 2678 -[NSDocument performActivityWithSynchronousWaiting:usingBlock:] (in AppKit) + 82 [0x7fff924834b6]
> + 2678 __-[NSDocument saveDocumentWithDelegate:didSaveSelector:contextInfo:]_block_invoke_1 (in AppKit) + 192 [0x7fff9246aef9]
> + 2678 -[NSDocument _commitEditingWithDelegate:didSomethingSelector:contextInfo:thenContinue:] (in AppKit) + 91 [0x7fff924762ab]
> + 2678 -[NSDocument _commitEditingThenContinue:] (in AppKit) + 337 [0x7fff9247a5e0]
> + 2678 __-[NSDocument saveDocumentWithDelegate:didSaveSelector:contextInfo:]_block_invoke_2 (in AppKit) + 527 [0x7fff9246b170]
> + 2678 __-[NSDocument saveDocumentWithDelegate:didSaveSelector:contextInfo:]_block_invoke_6 (in AppKit) + 290 [0x7fff9246b439]
> + 2678 -[NSDocument _checkForFileChangesThenSave:saveAs:orCancel:] (in AppKit) + 797 [0x7fff924803cf]
> + 2678 __-[NSDocument saveDocumentWithDelegate:didSaveSelector:contextInfo:]_block_invoke_7 (in AppKit) + 114 [0x7fff9246b5c0]
> + 2678 -[NSDocument continueActivityUsingBlock:] (in AppKit) + 42 [0x7fff92467823]
> + 2678 __-[NSDocument saveDocumentWithDelegate:didSaveSelector:contextInfo:]_block_invoke_8 (in AppKit) + 194 [0x7fff9246ba13]
> + 2678 -[NSDocument saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:] (in AppKit) + 112 [0x7fff9246c2cc]
> + 2678 -[NSDocument performActivityWithSynchronousWaiting:usingBlock:] (in AppKit) + 82 [0x7fff924834b6]
> + 2678 __-[NSDocument saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:]_block_invoke_1 (in AppKit) + 344 [0x7fff9246c42a]
> + 2678 -[NSDocument _commitEditingWithDelegate:didSomethingSelector:contextInfo:thenContinue:] (in AppKit) + 91 [0x7fff924762ab]
> + 2678 -[NSDocument _commitEditingThenContinue:] (in AppKit) + 337 [0x7fff9247a5e0]
> + 2678 __-[NSDocument saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:]_block_invoke_2 (in AppKit) + 131 [0x7fff9246c555]
> + 2678 -[NSDocument saveToURL:ofType:forSaveOperation:completionHandler:] (in AppKit) + 91 [0x7fff9246d860]
> + 2678 -[NSDocument performAsynchronousFileAccessUsingBlock:] (in AppKit) + 304 [0x7fff9248316b]
> + 2678 -[NSDocument _performFileAccessOnMainThread:usingBlock:] (in AppKit) + 466 [0x7fff92483413]
> + 2678 -[NSDocument continueFileAccessUsingBlock:] (in AppKit) + 227 [0x7fff92468bda]
> + 2678 __-[NSDocument saveToURL:ofType:forSaveOperation:completionHandler:]_block_invoke_1 (in AppKit) + 845 [0x7fff9246dbb3]
> + 2678 -[NSDocument _fileCoordinator:coordinateReadingContentsAndWritingItemAtURL:byAccessor:] (in AppKit) + 248 [0x7fff9247f6fc]
> + 2678 -[NSFileCoordinator(NSPrivate) _coordinateReadingItemAtURL:options:writingItemAtURL:options:error:byAccessor:] (in Foundation) + 677 [0x7fff8e4c2234]
> + 2678 -[NSFileCoordinator(NSPrivate) _blockOnAccessClaim:] (in Foundation) + 183 [0x7fff8e4c2bdb]
> + 2678 _dispatch_semaphore_wait_slow (in libdispatch.dylib) + 109 [0x7fff90f9808e]
> + 2678 semaphore_wait_trap (in libsystem_kernel.dylib) + 10 [0x7fff910b86b6]
> 2678 Thread_175779 DispatchQueue_2: com.apple.libdispatch-manager (serial)
> + 2678 _dispatch_mgr_thread (in libdispatch.dylib) + 54 [0x7fff90f9519e]
> + 2678 _dispatch_mgr_invoke (in libdispatch.dylib) + 923 [0x7fff90f9660e]
> + 2678 kevent (in libsystem_kernel.dylib) + 10 [0x7fff910ba7e6]
> 2678 Thread_175818: com.apple.CFSocket.private
> 2678 thread_start (in libsystem_c.dylib) + 13 [0x7fff93425b75]
> 2678 _pthread_start (in libsystem_c.dylib) + 335 [0x7fff934228bf]
> 2678 __CFSocketManager (in CoreFoundation) + 1355 [0x7fff98cd666b]
> 2678 __select (in libsystem_kernel.dylib) + 10 [0x7fff910b9df2]
>
> Total number in stack (recursive counted multiple, when >=5):
>
> Sort by top of stack, same collapsed (when >= 5):
> __select (in libsystem_kernel.dylib) 2678
> kevent (in libsystem_kernel.dylib) 2678
> semaphore_wait_trap (in libsystem_kernel.dylib) 2678
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> 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:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden