summaryrefslogtreecommitdiff
path: root/libusb
diff options
context:
space:
mode:
authorSean McBride <sean@rogue-research.com>2011-02-10 17:11:29 -0500
committerPeter Stuge <peter@stuge.se>2011-06-13 22:06:32 +0200
commit40327cd134718475f6cec8935b856d4fdff2099c (patch)
treedcbf7f550a3e230f700950fe66391a60020ccec2 /libusb
parent3ba2fae24886fec89410e5f2295f65363edcc2df (diff)
downloadlibusb-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.c15
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;