* 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.
This commit is contained in:
Ulrich Drepper 2006-09-17 06:02:48 +00:00
parent 4cd3633d1a
commit bd6d3b7dad
4 changed files with 50 additions and 4 deletions

View 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]

View 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

View 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

View 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