X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=sidebyside;f=tests%2Fcommon%2Fthread-id.h;fp=tests%2Fcommon%2Fthread-id.h;h=04db5bb5aa3d25fdc8120d5edc0053e6f6f409d6;hb=169e1020838cc5b9f3df503d160ce1bf0c939b2f;hp=0000000000000000000000000000000000000000;hpb=5bcf8326b6e13ca93429925bc38fb81c73155c54;p=userspace-rcu.git diff --git a/tests/common/thread-id.h b/tests/common/thread-id.h new file mode 100644 index 0000000..04db5bb --- /dev/null +++ b/tests/common/thread-id.h @@ -0,0 +1,62 @@ +#ifndef _TEST_THREAD_ID_H +#define _TEST_THREAD_ID_H + +/* + * thread-id.h + * + * Userspace RCU library - thread ID + * + * Copyright 2013 - Mathieu Desnoyers + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ +#include + +#ifdef __linux__ +# include + +# if defined(HAVE_GETTID) +/* + * Do not redefine gettid() as it is already included + * in bionic through . Some other libc + * may also already contain an implementation of gettid. + */ +# elif defined(_syscall0) +_syscall0(pid_t, gettid) +# elif defined(__NR_gettid) +static inline pid_t gettid(void) +{ + return syscall(__NR_gettid); +} +# endif + +static inline +unsigned long urcu_get_thread_id(void) +{ + return (unsigned long) gettid(); +} +#elif defined(__FreeBSD__) +# include + +static inline +unsigned long urcu_get_thread_id(void) +{ + return (unsigned long) pthread_getthreadid_np(); +} +#else +# warning "use pid as thread ID" +static inline +unsigned long urcu_get_thread_id(void) +{ + return (unsigned long) getpid(); +} +#endif + +#endif /* _TEST_THREAD_ID_H */