Move GetThreadHandleImpl() from header to source file.

This removes dependency on unistd.h header (required for syscall() on
linux), which includes a definition of getopt(), which may conflict with
a custom getopt implementation (for example, one that does work on
windows).
This commit is contained in:
Bartosz Taudul 2020-02-11 14:40:49 +01:00
parent bfdebc5775
commit 0d2e7f72a7
2 changed files with 44 additions and 53 deletions

View File

@ -18,10 +18,16 @@
#endif #endif
#ifdef __linux__ #ifdef __linux__
# ifndef __ANDROID__ # ifdef __ANDROID__
# include <syscall.h> # include <sys/types.h>
# else
# include <sys/syscall.h>
# endif # endif
# include <fcntl.h> # include <fcntl.h>
#elif defined __FreeBSD__
# include <sys/thr.h>
#elif defined __NetBSD__ || defined __DragonFly__
# include <sys/lwp.h>
#endif #endif
#ifdef __MINGW32__ #ifdef __MINGW32__
@ -41,6 +47,41 @@
namespace tracy namespace tracy
{ {
namespace detail
{
TRACY_API uint64_t GetThreadHandleImpl()
{
#if defined _WIN32 || defined __CYGWIN__
static_assert( sizeof( decltype( GetCurrentThreadId() ) ) <= sizeof( uint64_t ), "Thread handle too big to fit in protocol" );
return uint64_t( GetCurrentThreadId() );
#elif defined __APPLE__
uint64_t id;
pthread_threadid_np( pthread_self(), &id );
return id;
#elif defined __ANDROID__
return (uint64_t)gettid();
#elif defined __linux__
return (uint64_t)syscall( SYS_gettid );
#elif defined __FreeBSD__
long id;
thr_self( &id );
return id;
#elif defined __NetBSD__
return _lwp_self();
#elif defined __DragonFly__
return lwp_gettid();
#elif defined __OpenBSD__
return getthrid();
#else
static_assert( sizeof( decltype( pthread_self() ) ) <= sizeof( uint64_t ), "Thread handle too big to fit in protocol" );
return uint64_t( pthread_self() );
#endif
}
}
#ifdef TRACY_ENABLE #ifdef TRACY_ENABLE
struct ThreadNameData struct ThreadNameData
{ {

View File

@ -1,29 +1,6 @@
#ifndef __TRACYSYSTEM_HPP__ #ifndef __TRACYSYSTEM_HPP__
#define __TRACYSYSTEM_HPP__ #define __TRACYSYSTEM_HPP__
#if defined _WIN32 || defined __CYGWIN__
# ifndef _WINDOWS_
extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(void);
# endif
#elif defined __APPLE__ || ( !defined __ANDROID__ && !defined __linux__ )
# include <pthread.h>
#endif
#ifdef __linux__
# include <unistd.h>
# ifdef __ANDROID__
# include <sys/types.h>
# else
# include <sys/syscall.h>
# endif
#elif defined __FreeBSD__
# include <sys/thr.h>
#elif defined __NetBSD__ || defined __DragonFly__
# include <sys/lwp.h>
#elif defined __OpenBSD__
# include <unistd.h>
#endif
#include <stdint.h> #include <stdint.h>
#include "TracyApi.h" #include "TracyApi.h"
@ -33,34 +10,7 @@ namespace tracy
namespace detail namespace detail
{ {
static inline uint64_t GetThreadHandleImpl() TRACY_API uint64_t GetThreadHandleImpl();
{
#if defined _WIN32 || defined __CYGWIN__
static_assert( sizeof( decltype( GetCurrentThreadId() ) ) <= sizeof( uint64_t ), "Thread handle too big to fit in protocol" );
return uint64_t( GetCurrentThreadId() );
#elif defined __APPLE__
uint64_t id;
pthread_threadid_np( pthread_self(), &id );
return id;
#elif defined __ANDROID__
return (uint64_t)gettid();
#elif defined __linux__
return (uint64_t)syscall( SYS_gettid );
#elif defined __FreeBSD__
long id;
thr_self( &id );
return id;
#elif defined __NetBSD__
return _lwp_self();
#elif defined __DragonFly__
return lwp_gettid();
#elif defined __OpenBSD__
return getthrid();
#else
static_assert( sizeof( decltype( pthread_self() ) ) <= sizeof( uint64_t ), "Thread handle too big to fit in protocol" );
return uint64_t( pthread_self() );
#endif
}
} }
#ifdef TRACY_ENABLE #ifdef TRACY_ENABLE