Actually, to follow up a little. This is what I was doing: Within the operation's main I create a bunch of autoreleased objects and put this in an autoreleased array. In (very) rough code I do:
@property (retain) NSArray *words; NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; NSArray *someWords = [self generateABunchOfAutoReleasedObjectsInAnAutoreleasedArray]; self.words = myAutoreleasedArray; // inform delegate that we have a list of words ready for collection [self.delegate performSelectorOnMainThread: withObject:self waitUntilDone:NO]; [pool drain]; So I must not be understanding something (likely) because I thought that the autoreleased objects get retained when I add them to the autoreleased array. Then when I set the array to the property, it gets retained and so draining the pool shouldn't result in releasing the objects, should it? And, in fact, with some judicious log statements I see the objects don't get released when the pool drains, only much later when the document is closed. And yet, if I don't assign the autoreleased array to the property then I never see the crash and I see the objects being deallocated when the pool drains. I'd be grateful if somebody could point out the (stupid) mistake. Currently I'm stumped. Just occasionally I see a different backtrace like this: * thread #8: tid = 0x3703, 0x00007fff98d4afde libobjc.A.dylib`objc_release + 14, stop reason = EXC_BAD_ACCESS (code=13, address=0x0) frame #0: 0x00007fff98d4afde libobjc.A.dylib`objc_release + 14 frame #1: 0x00007fff98d4a2b0 libobjc.A.dylib`(anonymous namespace)::AutoreleasePoolPage::pop(void*) + 464 frame #2: 0x00007fff97624a62 CoreFoundation`_CFAutoreleasePoolPop + 34 frame #3: 0x00007fff92fdbb70 AppKit`-[NSSpellChecker _checkSpellingOfString:startingAt:language:wrap:inSpellDocumentWithTag:wordCount:reconnectOnError:] + 1379 frame #4: 0x00007fff92fdbbd0 AppKit`-[NSSpellChecker checkSpellingOfString:startingAt:language:wrap:inSpellDocumentWithTag:wordCount:reconnectOnError:] + 75 frame #5: 0x00007fff92fdbd06 AppKit`-[NSSpellChecker checkSpellingOfString:startingAt:] + 55 frame #6: 0x00000001000b6925 TeXnicle`-[NSString(Spelling) listOfMisspelledWords] + 342 at NSString+Spelling.m:51 frame #7: 0x00000001000b6b2e TeXnicle`-[TPSpellCheckFileOperation main] + 227 at TPSpellCheckFileOperation.m:68 frame #8: 0x00007fff9586fbb6 Foundation`-[__NSOperationInternal start] + 684 frame #9: 0x00007fff958773d1 Foundation`__block_global_6 + 129 frame #10: 0x00007fff99ecbf3d libdispatch.dylib`_dispatch_call_block_and_release + 15 frame #11: 0x00007fff99ec80fa libdispatch.dylib`_dispatch_client_callout + 8 frame #12: 0x00007fff99ec923e libdispatch.dylib`_dispatch_worker_thread2 + 304 frame #13: 0x00007fff93784ceb libsystem_c.dylib`_pthread_wqthread + 404 frame #14: 0x00007fff9376f1b1 libsystem_c.dylib`start_wqthread + 13 Could the problem be that I'm using the shared spell checker on multiple threads? So after some googling I came across this post: http://www.cocoabuilder.com/archive/cocoa/132829-nsspellchecker-crashes-after-64k-words.html It seems to hint at similar problems, but not exactly the same. Oh well, more digging to do. Cheers, Martin On 17, Jul, 2012, at 04:09 PM, Martin Hewitson <martin.hewit...@aei.mpg.de> wrote: > Thanks to all. Due to the various clues and tips I finally tracked down the > problem. I was creating a bunch of autoreleased objects within an autorelease > pool of an NSOperation then storing them. But of course, when the pool is > drained they all get released and boom! > > Thanks, > > Martin > > On 17, Jul, 2012, at 03:29 PM, Charlie Dickman <3tothe...@comcast.net> wrote: > >> I've seen this kind of thing before when I have released an object that was >> allocated in the autorelease pool. Have a go over of the objects you release >> and make sure that you own them when you release them. >> >> On Jul 17, 2012, at 6:30 AM, Martin Hewitson wrote: >> >>> Dear list, >>> >>> I've been trying to track down a crash that happens sometimes when a >>> document is closed in my NSPersistentDocument based app. This started to >>> appear during the process of going from GC to non-GC. But it only happens >>> after an undetermined number of document closes and reopens. The error >>> message I get in the debugger is >>> >>> * thread #1: tid = 0x2103, 0x00007fff8f614e90 libobjc.A.dylib`objc_msgSend >>> + 16, stop reason = EXC_BAD_ACCESS (code=1, address=0x10) >>> frame #0: 0x00007fff8f614e90 libobjc.A.dylib`objc_msgSend + 16 >>> frame #1: 0x00000001098147d0 >>> frame #2: 0x00007fff8f61a03c libobjc.A.dylib`(anonymous >>> namespace)::AutoreleasePoolPage::pop(void*) + 434 >>> frame #3: 0x00007fff938c8915 CoreFoundation`_CFAutoreleasePoolPop + 37 >>> frame #4: 0x00007fff8b8bb6cf Foundation`-[NSAutoreleasePool drain] + 154 >>> frame #5: 0x00007fff90146115 AppKit`-[NSApplication run] + 634 >>> frame #6: 0x00007fff903c2244 AppKit`NSApplicationMain + 867 >>> frame #7: 0x0000000100001574 TeXnicle`start + 52 >>> >>> >>> I've tried disabling various parts of the app trying to isolate where the >>> issue might be. >>> >>> Could anyone offer any advice on how I might better track this down? >>> Perhaps using instruments in some way? >>> >>> Cheers, >>> >>> Martin >>> >>> >>> >>> >>> >>> >>> _______________________________________________ >>> >>> 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: >>> https://lists.apple.com/mailman/options/cocoa-dev/3tothe4th%40comcast.net >>> >>> This email sent to 3tothe...@comcast.net >> >> Charlie Dickman >> 3tothe...@comcast.net >> >> _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com