diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-04-09 02:10:21 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-04-09 02:10:21 +0000 |
commit | 14b2ede5b27384fb037282b98cacbc516c9cd34c (patch) | |
tree | 7276aec28f416feb6bd45d38ac196d559c8f0633 | |
parent | 776cc5d31c5e8031315b1a0e4fb73e3755b18eba (diff) | |
download | glibc-14b2ede5b27384fb037282b98cacbc516c9cd34c.zip glibc-14b2ede5b27384fb037282b98cacbc516c9cd34c.tar.gz glibc-14b2ede5b27384fb037282b98cacbc516c9cd34c.tar.bz2 |
Update.
2002-04-08 Ulrich Drepper <drepper@redhat.com>
* 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 <eric@cctcorp.com>.
* sysdeps/unix/sysv/linux/bits/local_lim.h: Add DELAYTIMER_MAX.
(FLOATING_STACKS, ARCH_STACK_MAX_SIZE): Defined.
-rw-r--r-- | linuxthreads/ChangeLog | 12 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/posix-timer.h | 3 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/timer_getoverr.c | 4 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/timer_routines.c | 12 | ||||
-rw-r--r-- | sysdeps/sh/dl-tls.h | 3 |
5 files changed, 26 insertions, 8 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 36820a4..86fe8e8 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,8 +1,18 @@ +2002-04-08 Ulrich Drepper <drepper@redhat.com> + + * 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 <eric@cctcorp.com>. + + * sysdeps/unix/sysv/linux/bits/local_lim.h: Add DELAYTIMER_MAX. + 2002-04-08 kaz Kojima <kkojima@rr.iij4u.or.jp> * sysdeps/sh/pt-machine.h: Define _PT_MACHINE_H if it isn't defined yet. - (FLOATING_STACKS, EARCH_STACK_MAX_SIZE): Defined. + (FLOATING_STACKS, ARCH_STACK_MAX_SIZE): Defined. (THREAD_GETMEM, THREAD_GETMEM_NC, THREAD_SETMEM, THREAD_SETMEM_NC): Likewise. * sysdeps/sh/tls.h: New file. diff --git a/linuxthreads/sysdeps/pthread/posix-timer.h b/linuxthreads/sysdeps/pthread/posix-timer.h index 7a2caf2..a7d1856 100644 --- a/linuxthreads/sysdeps/pthread/posix-timer.h +++ b/linuxthreads/sysdeps/pthread/posix-timer.h @@ -1,5 +1,5 @@ /* Definitions for POSIX timer implementation on top of LinuxThreads. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Kaz Kylheku <kaz@ashi.footprints.net>. @@ -65,6 +65,7 @@ struct timer_node struct thread_node *thread; pid_t creator_pid; int refcount; + int overrun_count; }; diff --git a/linuxthreads/sysdeps/pthread/timer_getoverr.c b/linuxthreads/sysdeps/pthread/timer_getoverr.c index 204addc..4994f8f 100644 --- a/linuxthreads/sysdeps/pthread/timer_getoverr.c +++ b/linuxthreads/sysdeps/pthread/timer_getoverr.c @@ -1,4 +1,4 @@ -/* 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 <kaz@ashi.footprints.net>. @@ -37,7 +37,7 @@ timer_getoverrun (timerid) if (! timer_valid (timer = timer_id2ptr (timerid))) __set_errno (EINVAL); else - retval = 0; /* TODO: overrun counting not supported */ + retval = timer->overrun_count; pthread_mutex_unlock (&__timer_mutex); diff --git a/linuxthreads/sysdeps/pthread/timer_routines.c b/linuxthreads/sysdeps/pthread/timer_routines.c index 85d626b..6eae476 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 <kaz@ashi.footprints.net>. @@ -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); } diff --git a/sysdeps/sh/dl-tls.h b/sysdeps/sh/dl-tls.h index fb04373..98e2f19 100644 --- a/sysdeps/sh/dl-tls.h +++ b/sysdeps/sh/dl-tls.h @@ -26,5 +26,4 @@ typedef struct } tls_index; -extern void *__tls_get_addr (tls_index *ti) - __attribute__ ((__regparm__ (1))); +extern void *__tls_get_addr (tls_index *ti); |