darwin: Replaced low-level mach API with pthread API

Found this because clang was warning that the return value was being
converted from unsigned to signed.

The need for a mach API surprised me, and I found this alternative
formulation in a Chromium bug:

https://groups.google.com/forum/#!topic/native-client-reviews/z---hlHbQNc

which describes: "mach_thread_self() needs to be balanced by mach_port_deallocate(),
which is two system calls. pthread_mach_thread_np(pthread_self()) is two libc
function calls and no system calls, because pthread caches the Mach port."

Fixed the conversion warning too, with a cast.

Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
This commit is contained in:
Sean McBride
2017-12-29 13:23:00 -05:00
committed by Chris Dickens
parent 0f59214f12
commit 860657126e
2 changed files with 3 additions and 4 deletions

View File

@@ -29,7 +29,7 @@
# include <unistd.h>
# include <sys/syscall.h>
#elif defined(__APPLE__)
# include <mach/mach.h>
# include <pthread.h>
#elif defined(__CYGWIN__)
# include <windows.h>
#endif
@@ -69,8 +69,7 @@ int usbi_get_tid(void)
real thread support. For 5.1 and earlier, -1 is returned. */
ret = syscall(SYS_getthrid);
#elif defined(__APPLE__)
ret = mach_thread_self();
mach_port_deallocate(mach_task_self(), ret);
ret = (int)pthread_mach_thread_np(pthread_self());
#elif defined(__CYGWIN__)
ret = GetCurrentThreadId();
#else

View File

@@ -1 +1 @@
#define LIBUSB_NANO 11280
#define LIBUSB_NANO 11281