From 14b2ede5b27384fb037282b98cacbc516c9cd34c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 9 Apr 2002 02:10:21 +0000 Subject: Update. 2002-04-08 Ulrich Drepper * sysdeps/pthread/timer_getoverr.c: Return real overrun. * sysdeps/pthread/posix-timer.h (struct timer_node): Add overrun_count. * sysdeps/pthread/timer_routines.c (thread_func): Schedule next timeout based on previous one and not on current time. Count overruns. Patch by Eric F. Sorton . * sysdeps/unix/sysv/linux/bits/local_lim.h: Add DELAYTIMER_MAX. (FLOATING_STACKS, ARCH_STACK_MAX_SIZE): Defined. --- linuxthreads/sysdeps/pthread/timer_routines.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'linuxthreads/sysdeps/pthread/timer_routines.c') diff --git a/linuxthreads/sysdeps/pthread/timer_routines.c b/linuxthreads/sysdeps/pthread/timer_routines.c index 85d626b0f4..6eae476cf5 100644 --- a/linuxthreads/sysdeps/pthread/timer_routines.c +++ b/linuxthreads/sysdeps/pthread/timer_routines.c @@ -1,5 +1,5 @@ /* Helper code for POSIX timer implementation on LinuxThreads. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Kaz Kylheku . @@ -413,8 +413,16 @@ thread_func (void *arg) if (__builtin_expect (timer->value.it_interval.tv_sec, 0) != 0 || timer->value.it_interval.tv_nsec != 0) { - timespec_add (&timer->expirytime, &now, + timer->overrun_count = 0; + timespec_add (&timer->expirytime, &timer->expirytime, &timer->value.it_interval); + while (timespec_compare(&timer->expirytime, &now) < 0) + { + timespec_add (&timer->expirytime, &timer->expirytime, + &timer->value.it_interval); + if (timer->overrun_count < DELAYTIMER_MAX) + ++timer->overrun_count; + } __timer_thread_queue_timer (self, timer); } -- cgit v1.2.3-70-g09d2