aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/kernel-posix-timers.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/kernel-posix-timers.h')
-rw-r--r--sysdeps/unix/sysv/linux/kernel-posix-timers.h54
1 files changed, 8 insertions, 46 deletions
diff --git a/sysdeps/unix/sysv/linux/kernel-posix-timers.h b/sysdeps/unix/sysv/linux/kernel-posix-timers.h
index 9d86bb1dab..cd6bf89acd 100644
--- a/sysdeps/unix/sysv/linux/kernel-posix-timers.h
+++ b/sysdeps/unix/sysv/linux/kernel-posix-timers.h
@@ -19,29 +19,7 @@
#include <setjmp.h>
#include <signal.h>
#include <sys/types.h>
-
-
-/* Nonzero if the system calls are not available. */
-extern int __no_posix_timers attribute_hidden;
-
-/* Callback to start helper thread. */
-extern void __timer_start_helper_thread (void) attribute_hidden;
-
-/* Control variable for helper thread creation. */
-extern pthread_once_t __timer_helper_once attribute_hidden;
-
-/* Called from fork so that the new subprocess re-creates the
- notification thread if necessary. */
-void __timer_fork_subprocess (void) attribute_hidden;
-
-/* TID of the helper thread. */
-extern pid_t __timer_helper_tid attribute_hidden;
-
-/* List of active SIGEV_THREAD timers. */
-extern struct timer *__timer_active_sigev_thread attribute_hidden;
-
-/* Lock for __timer_active_sigev_thread. */
-extern pthread_mutex_t __timer_active_sigev_thread_lock attribute_hidden;
+#include <nptl/descr.h>
extern __typeof (timer_create) __timer_create;
libc_hidden_proto (__timer_create)
@@ -53,25 +31,9 @@ libc_hidden_proto (__timer_getoverrun)
/* Type of timers in the kernel. */
typedef int kernel_timer_t;
-/* Internal representation of SIGEV_THREAD timer. */
-struct timer
-{
- kernel_timer_t ktimerid;
-
- void (*thrfunc) (sigval_t);
- sigval_t sival;
- pthread_attr_t attr;
-
- /* Next element in list of active SIGEV_THREAD timers. */
- struct timer *next;
-};
-
-
/* For !SIGEV_THREAD, the resulting 'timer_t' is the returned kernel timer
- identifier (kernel_timer_t), while for SIGEV_THREAD it uses the fact malloc
- returns at least _Alignof (max_align_t) pointers plus that valid
- kernel_timer_t are always positive to set the MSB bit of the returned
- 'timer_t' to indicate the timer handles a SIGEV_THREAD. */
+ identifier (kernel_timer_t), while for SIGEV_THREAD it assumes the
+ pthread_t is always 8-byte aligned. */
static inline timer_t
kernel_timer_to_timerid (kernel_timer_t ktimerid)
@@ -80,7 +42,7 @@ kernel_timer_to_timerid (kernel_timer_t ktimerid)
}
static inline timer_t
-timer_to_timerid (struct timer *ptr)
+pthread_to_timerid (pthread_t ptr)
{
return (timer_t) (INTPTR_MIN | (uintptr_t) ptr >> 1);
}
@@ -91,17 +53,17 @@ timer_is_sigev_thread (timer_t timerid)
return (intptr_t) timerid < 0;
}
-static inline struct timer *
-timerid_to_timer (timer_t timerid)
+static inline struct pthread *
+timerid_to_pthread (timer_t timerid)
{
- return (struct timer *)((uintptr_t) timerid << 1);
+ return (struct pthread *)((uintptr_t) timerid << 1);
}
static inline kernel_timer_t
timerid_to_kernel_timer (timer_t timerid)
{
if (timer_is_sigev_thread (timerid))
- return timerid_to_timer (timerid)->ktimerid;
+ return timerid_to_pthread (timerid)->timerid;
else
return (kernel_timer_t) ((uintptr_t) timerid);
}