Thanks for your help, Bill -- your suggestion (plus an extern "C" declaration) 
causes the error to go away!

Radar filed -- 8595912

Many Thanks,
Andy

P.S.  It's in the radar, but the doc URL is 
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/GarbageCollection/GarbageCollection.pdf
 -- under the topic "Threading" (or search the pdf for "register").


On Oct 25, 2010, at 5:19 PM, Bill Bumgarner wrote:

> 
> On Oct 25, 2010, at 2:22 PM, Andy O'Meara wrote:
> 
>> Per Apple GC Programming Guide (page 15):
>> 
>> // SNIP //
>> 
>> Garbage collection is performed on its own thread--a thread is explicitly 
>> registered with the collector if it calls NSThread's currentThread method 
>> (or if it uses an autorelease pool). There is no other explicit API for 
>> registering a pthread with the collector.
>> 
>> // SNIP //
> 
> That'd be a bug;  please file via http://bugreport.apple.com/ and provide an 
> URL to the document.
> 
>> However when my bundle runs under as a 64 bit GC app or a 64 bit screen 
>> saver (via the sys prefs app), the following log msg shows up for each call 
>> to [NSThread currentThread] I make when the thread first starts:
>> 
>> [0x0-0x8b08b0].com.apple.systempreferences[1198]     System 
>> Preferences(1198,0x11a8f9000) malloc: *** auto malloc[1198]: error: GC 
>> operation on unregistered thread. Thread registered implicitly. Break on 
>> auto_zone_thread_registration_error() to debug.
>> 
>> As the message directs, I set that breakpoint, and I see the following stack 
>> inside of the [NSThread currentThread] call:
>> 
>> #0   0x7fff81b08c64 in auto_zone_thread_registration_error
>> #1   0x7fff81b089aa in Auto::Zone::registered_thread
>> #2   0x7fff81b01df0 in auto_zone_allocate_object
>> #3   0x7fff85c8602a in _internal_class_createInstanceFromZone
>> #4   0x7fff866d56e9 in +[NSObject(NSObject) allocWithZone:]
>> #5   0x7fff866d5671 in +[NSObject(NSObject) new]
>> #6   0x7fff88e553b5 in _NSThreadGet0
>> 
>> So, it seems like I'm following the spec yet I can't seem to shake that 
>> error message.  Anyone on the inside care to illuminate what's happening 
>> here?  Apart from those [NSThread currentThread] calls I make when the 
>> pthread first starts, is there something else I need to call that the GC 
>> spec doesn't discuss?
> 
> Yes.  Call objc_registerThreadWithCollector() from the thread.
> 
> The behavior was changed because folks were surprised to see the collector 
> being registered on their thread when they were "only" using Core Foundation 
> code and "no Objective-C".   Core Foundation is actually implemented using a 
> growing chunk of Objective-C code.   Thus, the collector became noisy about 
> this so people wouldn't be surprised -- or, more importantly, would be 
> surprised but would figure out what is up more quickly.
> 
> That document is wrong.
> 
> b.bum

_______________________________________________

Cocoa-dev mailing list ([email protected])

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]

Reply via email to