Merge "Fix gettid() on Windows."
This commit is contained in:
commit
8076616c66
2 changed files with 31 additions and 28 deletions
|
@ -17,6 +17,14 @@
|
|||
#ifndef _LIBS_CUTILS_THREADS_H
|
||||
#define _LIBS_CUTILS_THREADS_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#if !defined(_WIN32)
|
||||
#include <pthread.h>
|
||||
#else
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -29,10 +37,9 @@ extern "C" {
|
|||
/***********************************************************************/
|
||||
/***********************************************************************/
|
||||
|
||||
#if !defined(_WIN32)
|
||||
extern pid_t gettid();
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sys/types.h>
|
||||
#if !defined(_WIN32)
|
||||
|
||||
typedef struct {
|
||||
pthread_mutex_t lock;
|
||||
|
@ -40,14 +47,10 @@ typedef struct {
|
|||
pthread_key_t tls;
|
||||
} thread_store_t;
|
||||
|
||||
extern pid_t gettid();
|
||||
|
||||
#define THREAD_STORE_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0 }
|
||||
|
||||
#else // !defined(_WIN32)
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
typedef struct {
|
||||
int lock_init;
|
||||
int has_tls;
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
#include "cutils/threads.h"
|
||||
|
||||
#if !defined(_WIN32)
|
||||
|
||||
// For gettid.
|
||||
#if defined(__APPLE__)
|
||||
#include "AvailabilityMacros.h" // For MAC_OS_X_VERSION_MAX_ALLOWED
|
||||
|
@ -30,9 +28,29 @@
|
|||
#include <syscall.h>
|
||||
#include <unistd.h>
|
||||
#elif defined(_WIN32)
|
||||
#include <Windows.h>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
// No definition needed for Android because we'll just pick up bionic's copy.
|
||||
#ifndef __ANDROID__
|
||||
pid_t gettid() {
|
||||
#if defined(__APPLE__)
|
||||
uint64_t owner;
|
||||
int rc = pthread_threadid_np(NULL, &owner);
|
||||
if (rc != 0) {
|
||||
abort();
|
||||
}
|
||||
return owner;
|
||||
#elif defined(__linux__)
|
||||
return syscall(__NR_gettid);
|
||||
#elif defined(_WIN32)
|
||||
return GetCurrentThreadId();
|
||||
#endif
|
||||
}
|
||||
#endif // __ANDROID__
|
||||
|
||||
#if !defined(_WIN32)
|
||||
|
||||
void* thread_store_get( thread_store_t* store )
|
||||
{
|
||||
if (!store->has_tls)
|
||||
|
@ -58,24 +76,6 @@ extern void thread_store_set( thread_store_t* store,
|
|||
pthread_setspecific( store->tls, value );
|
||||
}
|
||||
|
||||
// No definition needed for Android because we'll just pick up bionic's copy.
|
||||
#ifndef __ANDROID__
|
||||
pid_t gettid() {
|
||||
#if defined(__APPLE__)
|
||||
uint64_t owner;
|
||||
int rc = pthread_threadid_np(NULL, &owner);
|
||||
if (rc != 0) {
|
||||
abort();
|
||||
}
|
||||
return owner;
|
||||
#elif defined(__linux__)
|
||||
return syscall(__NR_gettid);
|
||||
#elif defined(_WIN32)
|
||||
return (pid_t)GetCurrentThreadId();
|
||||
#endif
|
||||
}
|
||||
#endif // __ANDROID__
|
||||
|
||||
#else /* !defined(_WIN32) */
|
||||
void* thread_store_get( thread_store_t* store )
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue