]> sourceware.org Git - glibc.git/commitdiff
* sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S: For PI
authorUlrich Drepper <drepper@redhat.com>
Sun, 17 Sep 2006 06:02:48 +0000 (06:02 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 17 Sep 2006 06:02:48 +0000 (06:02 +0000)
mutexes wake all mutexes.
* sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Don't increment
WAKEUP_SEQ if this would increase the value beyond TOTAL_SEQ.
* sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Likewise.

nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S

index 6c7fd49b859013db8981ff2e82cfea211c62229e..656dfe3f3eeef5368dfda8089574901de074d002 100644 (file)
@@ -1,3 +1,11 @@
+2006-09-12  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+       * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S: For PI
+       mutexes wake all mutexes.
+       * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Don't increment
+       WAKEUP_SEQ if this would increase the value beyond TOTAL_SEQ.
+       * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Likewise.
+
 2006-09-12  Ulrich Drepper  <drepper@redhat.com>
 
        * tst-cond22.c (tf): Slight changes to the pthread_cond_wait use
@@ -12,7 +20,7 @@
        * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
        * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
        * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
-                                                       
+
 2006-09-08  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #3123]
index 6bd6e60ec17c5e63469b8349995b1362a33721d1..56f0aa95de4ff84987d5f024e2f302632da7fff4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
 #include <shlib-compat.h>
 #include <lowlevelcond.h>
 #include <kernel-features.h>
+#include <pthread-pi-defines.h>
 #include "lowlevel-atomic.h"
 
 #define SYS_futex              240
@@ -98,6 +99,11 @@ __pthread_cond_broadcast:
        bt/s    9f
         add    #cond_futex, r4
 
+       /* XXX: The kernel so far doesn't support requeue to PI futex.  */
+       mov.l   @(MUTEX_KIND,r9), r0
+       tst     #PI_BIT, r0
+       bf      9f
+
        /* Wake up all threads.  */
        mov     #FUTEX_CMP_REQUEUE, r5
        mov     #1, r6
index 74206a71ec1a4f5f21ea2236d9b37800c244cc13..6c782c8a76f2c68f1a31f4e82323d16ecf9b02fc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -521,6 +521,21 @@ __condvar_tw_cleanup:
        mov     #1, r2
        mov     #0, r3
 
+       /* We increment the wakeup_seq counter only if it is lower than
+          total_seq.  If this is not the case the thread was woken and
+          then canceled.  In this case we ignore the signal.  */
+       mov.l   @(total_seq+4,r8), r0
+       mov.l   @(wakeup_seq+4,r8), r1
+       cmp/hi  r1, r0
+       bt/s    6f
+        cmp/hi r0, r1
+       bt      7f
+       mov.l   @(total_seq,r8), r0
+       mov.l   @(wakeup_seq,r8), r1
+       cmp/hs  r0, r1
+       bt      7f
+
+6:
        clrt
        mov.l   @(wakeup_seq,r8),r0
        mov.l   @(wakeup_seq+4,r8),r1
@@ -532,6 +547,7 @@ __condvar_tw_cleanup:
        add     r2, r0
        mov.l   r0,@(cond_futex,r8)
 
+7:
        clrt
        mov.l   @(woken_seq,r8),r0
        mov.l   @(woken_seq+4,r8),r1
index 2d6b68566888adb925b802bc233ea1bdc9fd4914..6c59f3e6c030be27164b4094c44175f85aba79a1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -385,6 +385,21 @@ __condvar_w_cleanup:
        mov     #1, r2
        mov     #0, r3
 
+       /* We increment the wakeup_seq counter only if it is lower than
+          total_seq.  If this is not the case the thread was woken and
+          then canceled.  In this case we ignore the signal.  */
+       mov.l   @(total_seq+4,r8), r0
+       mov.l   @(wakeup_seq+4,r8), r1
+       cmp/hi  r1, r0
+       bt/s    6f
+        cmp/hi r0, r1
+       bt      7f
+       mov.l   @(total_seq,r8), r0
+       mov.l   @(wakeup_seq,r8), r1
+       cmp/hs  r0, r1
+       bt      7f
+
+6:
        clrt
        mov.l   @(wakeup_seq,r8),r0
        mov.l   @(wakeup_seq+4,r8),r1
@@ -396,6 +411,7 @@ __condvar_w_cleanup:
        add     r2, r0
        mov.l   r0,@(cond_futex,r8)
 
+7:
        clrt
        mov.l   @(woken_seq,r8),r0
        mov.l   @(woken_seq+4,r8),r1
This page took 0.061133 seconds and 5 git commands to generate.