Merge "Fix gettid() on Windows."

This commit is contained in:
Dan Albert 2015-04-30 00:56:08 +00:00 committed by Gerrit Code Review
commit 8076616c66
2 changed files with 31 additions and 28 deletions

View file

@ -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;

View file

@ -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 )
{