diff options
author | Sean McBride <sean@rogue-research.com> | 2011-02-10 17:11:29 -0500 |
---|---|---|
committer | Peter Stuge <peter@stuge.se> | 2011-06-13 22:06:32 +0200 |
commit | 40327cd134718475f6cec8935b856d4fdff2099c (patch) | |
tree | dcbf7f550a3e230f700950fe66391a60020ccec2 /libusb | |
parent | 3ba2fae24886fec89410e5f2295f65363edcc2df (diff) | |
download | libusb-40327cd134718475f6cec8935b856d4fdff2099c.tar.gz |
Darwin: Fix #63 error when apps use Objective-C garbage collection
Diffstat (limited to 'libusb')
-rw-r--r-- | libusb/os/darwin_usb.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/libusb/os/darwin_usb.c b/libusb/os/darwin_usb.c index 7927b3a..912b65c 100644 --- a/libusb/os/darwin_usb.c +++ b/libusb/os/darwin_usb.c @@ -34,8 +34,13 @@ #include <mach/clock.h> #include <mach/clock_types.h> #include <mach/mach_host.h> - #include <mach/mach_port.h> + +#include <AvailabilityMacros.h> +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + #include <objc/objc-auto.h> +#endif + #include <IOKit/IOCFBundle.h> #include <IOKit/usb/IOUSBLib.h> #include <IOKit/IOCFPlugIn.h> @@ -264,6 +269,14 @@ static void *event_thread_main (void *arg0) { struct libusb_context *ctx = (struct libusb_context *)arg0; CFRunLoopRef runloop; + /* Tell the Objective-C garbage collector about this thread. + This is required because, unlike NSThreads, pthreads are + not automatically registered. Although we don't use + Objective-C, we use CoreFoundation, which does. */ +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + objc_registerThreadWithCollector(); +#endif + /* hotplug (device removal) source */ CFRunLoopSourceRef libusb_notification_cfsource; io_notification_port_t libusb_notification_port; |