Hi,

Occasionally users of my app report that the app hangs and uses a lot of CPU. I 
received a number of process samples that show a similar pattern:

  Multiple threads seem to hang at "__spin_lock" while trying to release an 
NSImage/CGImage (trace below).

Quick summary of what the app does just before the problem happens:

The app creates thumbnail images for files in various folders (via 
QLThumbnailImageCreate), resizes the images, and displays them. Each thumbnail 
image is created in a block executed by a single NSOperationQueue instance 
(concurrently).

Looking at the process sample, is is possible that the various operation blocks 
somehow lock up on the same image? Each image should only be processed once, 
but maybe in some underlying API they share a common resource?

Since they all seem to lock up in the AutoreleasePool, should I use my own 
AutoreleasePool in the block that creates the preview images?

I can't reproduce the problem on my dev system. Any tips what I could to do 
debug this?

Thanks in advance,
Rico

---------------------------------
Process sample excerpt:


    2228 Thread_1384   DispatchQueue_6: com.apple.root.default-priority  
(concurrent)
      2228 start_wqthread
        2228 _pthread_wqthread
          2228 _dispatch_worker_thread2
            2228 _dispatch_call_block_and_release
              2228 ____NSOQSchedule_block_invoke_2
                2228 -[__NSOperationInternal start]
                  2228 -[NSBlockOperation main]
                    2228 0x29ab5
                      2228 0x225d3
                        2228 -[NSImage CGImageForProposedRect:context:hints:]
   
                                   […] (omitted a few calls)

                                                    2228 image_finalize
                                                      2228 _CFRelease
                                                        2228 
image_provider_finalize
                                                          2228 
ImageProviderReleaseInfoCallback
                                                            2228 __spin_lock



2228 Thread_1458   DispatchQueue_6: com.apple.root.default-priority  
(concurrent)
 […] (similar to below)

2228 Thread_1487   DispatchQueue_6: com.apple.root.default-priority  
(concurrent)
      2228 start_wqthread
        2228 _pthread_wqthread
          2228 _dispatch_worker_thread2
            2228 _dispatch_call_block_and_release
              2228 ____NSOQSchedule_block_invoke_2
                2228 -[__NSOperationInternal start]
                  2228 NSPopAutoreleasePool
                    2228 _CFAutoreleasePoolPop
                      2228 CFRelease
                        2228 -[NSImage dealloc]
                          2228 -[NSImage _deallocAuxiliaryStorage]
                            2228 -[NSCGImageSnapshotRep dealloc]
                              2228 _CFRelease
                                2228 image_finalize
                                  2228 _CFRelease
                                    2228 image_provider_finalize
                                      2228 ImageProviderReleaseInfoCallback
                                        2228 __spin_lock


_______________________________________________

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 arch...@mail-archive.com

Reply via email to