aboutsummaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/timer_delete.c
diff options
context:
space:
mode:
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/timer_delete.c')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/timer_delete.c104
1 files changed, 32 insertions, 72 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/timer_delete.c b/nptl/sysdeps/unix/sysv/linux/timer_delete.c
index 98f68e9..598be83 100644
--- a/nptl/sysdeps/unix/sysv/linux/timer_delete.c
+++ b/nptl/sysdeps/unix/sysv/linux/timer_delete.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -24,91 +24,51 @@
#include "kernel-posix-timers.h"
-#ifdef __NR_timer_delete
-# ifndef __ASSUME_POSIX_TIMERS
-static int compat_timer_delete (timer_t timerid);
-# define timer_delete static compat_timer_delete
-# include <nptl/sysdeps/pthread/timer_delete.c>
-# undef timer_delete
-# endif
-
-# ifdef timer_delete_alias
-# define timer_delete timer_delete_alias
-# endif
+#ifdef timer_delete_alias
+# define timer_delete timer_delete_alias
+#endif
int
timer_delete (timerid)
timer_t timerid;
{
-# undef timer_delete
-# ifndef __ASSUME_POSIX_TIMERS
- if (__no_posix_timers >= 0)
-# endif
- {
- struct timer *kt = (struct timer *) timerid;
+#undef timer_delete
+ struct timer *kt = (struct timer *) timerid;
- /* Delete the kernel timer object. */
- int res = INLINE_SYSCALL (timer_delete, 1, kt->ktimerid);
+ /* Delete the kernel timer object. */
+ int res = INLINE_SYSCALL (timer_delete, 1, kt->ktimerid);
- if (res == 0)
+ if (res == 0)
+ {
+ if (kt->sigev_notify == SIGEV_THREAD)
{
- if (kt->sigev_notify == SIGEV_THREAD)
+ /* Remove the timer from the list. */
+ pthread_mutex_lock (&__active_timer_sigev_thread_lock);
+ if (__active_timer_sigev_thread == kt)
+ __active_timer_sigev_thread = kt->next;
+ else
{
- /* Remove the timer from the list. */
- pthread_mutex_lock (&__active_timer_sigev_thread_lock);
- if (__active_timer_sigev_thread == kt)
- __active_timer_sigev_thread = kt->next;
- else
- {
- struct timer *prevp = __active_timer_sigev_thread;
- while (prevp->next != NULL)
- if (prevp->next == kt)
- {
- prevp->next = kt->next;
- break;
- }
- else
- prevp = prevp->next;
- }
- pthread_mutex_unlock (&__active_timer_sigev_thread_lock);
+ struct timer *prevp = __active_timer_sigev_thread;
+ while (prevp->next != NULL)
+ if (prevp->next == kt)
+ {
+ prevp->next = kt->next;
+ break;
+ }
+ else
+ prevp = prevp->next;
}
-
-# ifndef __ASSUME_POSIX_TIMERS
- /* We know the syscall support is available. */
- __no_posix_timers = 1;
-# endif
-
- /* Free the memory. */
- (void) free (kt);
-
- return 0;
+ pthread_mutex_unlock (&__active_timer_sigev_thread_lock);
}
- /* The kernel timer is not known or something else bad happened.
- Return the error. */
-# ifndef __ASSUME_POSIX_TIMERS
- if (errno != ENOSYS)
- {
- __no_posix_timers = 1;
-# endif
- return -1;
-# ifndef __ASSUME_POSIX_TIMERS
- }
+ /* Free the memory. */
+ (void) free (kt);
- __no_posix_timers = -1;
-# endif
+ return 0;
}
-# ifndef __ASSUME_POSIX_TIMERS
- return compat_timer_delete (timerid);
-# endif
+ /* The kernel timer is not known or something else bad happened.
+ Return the error. */
+ return -1;
}
-#else
-# ifdef timer_delete_alias
-# define timer_delete timer_delete_alias
-# endif
-/* The new system calls are not available. Use the userlevel
- implementation. */
-# include <nptl/sysdeps/pthread/timer_delete.c>
-#endif