From: libusb T. <tr...@li...> - 2010-10-04 17:43:22
|
#63: [PATCH] libusb pthread usage causes error in garbage collected Cocoa apps ---------------------------+------------------------------------------------ Reporter: rogueresearch | Owner: Type: defect | Status: new Component: libusb-1.0 | Keywords: Blocks: | Blocked By: ---------------------------+------------------------------------------------ When libusb is used in a Mac OS X Cocoa application that uses garbage collection, an error is logged by the OS: malloc: *** auto malloc[22178]: error: GC operation on unregistered thread. Thread registered implicitly. Break on auto_zone_thread_registration_error() to debug. Although libusb does not use Objective-C, it does use CoreFoundation which in turn uses Objective-C. CoreFoundation objects participate in Obj-C garbage collection, and so in a way libusb does too. Anyway, the fix is easy: Whenever libusb creates a pthread, that thread must register itself with the garbage collector by calling objc_registerThreadWithCollector(). I am testing a patch currently... Note that this will require linking to an additional lib, namely libobjc.dylib. I wouldn't worry about that though, because libusb already links to CoreFoundation.framework, which as you can see below, already links to libobjc: $ otool -L /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.42.0) /usr/lib/libauto.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libicucore.A.dylib (compatibility version 1.0.0, current version 40.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0) /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1) -- Ticket URL: <http://libusb.org/ticket/63> libusb <http://libusb.org/> C library for writing portable USB drivers in userspace |