• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Blocked in NSFileCoordinator
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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

  • Follow-Ups:
    • Re: Blocked in NSFileCoordinator
      • From: "Gerriet M. Denkmann" <email@hidden>
References: 
 >Blocked in NSFileCoordinator (From: "Gerriet M. Denkmann" <email@hidden>)

  • Prev by Date: App updating
  • Next by Date: Re: Saving PNG files from NSImage
  • Previous by thread: Blocked in NSFileCoordinator
  • Next by thread: Re: Blocked in NSFileCoordinator
  • Index(es):
    • Date
    • Thread