From: Mathieu Desnoyers Date: Wed, 19 Jun 2013 14:30:58 +0000 (-0400) Subject: Implement thread-id.h wrapper X-Git-Tag: v0.8.0~67 X-Git-Url: https://git.lttng.org/?p=urcu.git;a=commitdiff_plain;h=550265b2c2de28e0fe566f71fb1cab64fa620efa Implement thread-id.h wrapper Signed-off-by: Mathieu Desnoyers --- diff --git a/tests/Makefile.am b/tests/Makefile.am index bbaa18f..aa36bf4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -22,7 +22,7 @@ noinst_PROGRAMS = test_urcu test_urcu_dynamic_link test_urcu_timing \ test_urcu_lfs_rcu_dynlink \ test_urcu_multiflavor test_urcu_multiflavor_dynlink \ test_urcu_fork -noinst_HEADERS = rcutorture.h test_urcu_multiflavor.h cpuset.h +noinst_HEADERS = rcutorture.h test_urcu_multiflavor.h cpuset.h thread-id.h if COMPAT_ARCH COMPAT=$(top_srcdir)/compat_arch_@ARCHTYPE@.c diff --git a/tests/thread-id.h b/tests/thread-id.h new file mode 100644 index 0000000..9378edc --- /dev/null +++ b/tests/thread-id.h @@ -0,0 +1,55 @@ +#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. + */ + +#ifdef __linux__ +# include + +# if 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 */