Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 9 Apr 2002 02:10:21 +0000 (02:10 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 9 Apr 2002 02:10:21 +0000 (02:10 +0000)
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.

linuxthreads/ChangeLog
linuxthreads/sysdeps/pthread/posix-timer.h
linuxthreads/sysdeps/pthread/timer_getoverr.c
linuxthreads/sysdeps/pthread/timer_routines.c
sysdeps/sh/dl-tls.h

index 36820a4..86fe8e8 100644 (file)
@@ -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.
index 7a2caf2..a7d1856 100644 (file)
@@ -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;
 };
 
 
index 204addc..4994f8f 100644 (file)
@@ -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);
 
index 85d626b..6eae476 100644 (file)
@@ -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);
                }
 
index fb04373..98e2f19 100644 (file)
@@ -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);