diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-09-09 11:21:48 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-09-09 11:21:48 +0000 |
commit | 2b6a801eed386e0b5b45fed671d898e8090cecbb (patch) | |
tree | 3d1e875cd9c02082fd4722f9a0f2d5dd5053360d /nptl/sysdeps | |
parent | 346e6ad4016f3a19f71ccd0edd8a2682746d6fe7 (diff) | |
download | glibc-2b6a801eed386e0b5b45fed671d898e8090cecbb.tar glibc-2b6a801eed386e0b5b45fed671d898e8090cecbb.tar.gz glibc-2b6a801eed386e0b5b45fed671d898e8090cecbb.tar.bz2 glibc-2b6a801eed386e0b5b45fed671d898e8090cecbb.zip |
[BZ #1006]
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela):
Ensure relocation doesn't clobber any bits outside of the
immediate field for R_SPARC_TLS_LE_HIX22, R_SPARC_WDISP30,
R_SPARC_HI22 and R_SPARC_H44.
Diffstat (limited to 'nptl/sysdeps')
4 files changed, 13 insertions, 12 deletions
diff --git a/nptl/sysdeps/pthread/pthread_cond_wait.c b/nptl/sysdeps/pthread/pthread_cond_wait.c index f641a7e8b1..f5f5cec5a8 100644 --- a/nptl/sysdeps/pthread/pthread_cond_wait.c +++ b/nptl/sysdeps/pthread/pthread_cond_wait.c @@ -51,13 +51,15 @@ __condvar_cleanup (void *arg) { /* This thread is not waiting anymore. Adjust the sequence counters appropriately. We do not increment WAKEUP_SEQ if this would - bump it over the value of TOTAL_SEQ> This can happen if a thread + bump it over the value of TOTAL_SEQ. This can happen if a thread was woken and then canceled. */ if (cbuffer->cond->__data.__wakeup_seq < cbuffer->cond->__data.__total_seq) - ++cbuffer->cond->__data.__wakeup_seq; + { + ++cbuffer->cond->__data.__wakeup_seq; + ++cbuffer->cond->__data.__futex; + } ++cbuffer->cond->__data.__woken_seq; - ++cbuffer->cond->__data.__futex; } cbuffer->cond->__data.__nwaiters -= 1 << COND_CLOCK_BITS; diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S index 692e0dd670..f481a8e43c 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S @@ -406,7 +406,7 @@ __condvar_tw_cleanup: cmpl 20(%esp), %eax jne 3f - /* We increment the woken_seq counter only if it is lower than + /* 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. */ movl total_seq(%ebx), %eax @@ -419,10 +419,9 @@ __condvar_tw_cleanup: 6: addl $1, wakeup_seq(%ebx) adcl $0, wakeup_seq+4(%ebx) + addl $1, cond_futex(%ebx) -7: addl $1, cond_futex(%ebx) - - addl $1, woken_seq(%ebx) +7: addl $1, woken_seq(%ebx) adcl $0, woken_seq+4(%ebx) 3: subl $(1 << clock_bits), cond_nwaiters(%ebx) diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S index 7f93a85732..f16c7d9198 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S @@ -297,7 +297,7 @@ __condvar_w_cleanup: cmpl 12(%esp), %eax jne 3f - /* We increment the woken_seq counter only if it is lower than + /* 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. */ movl total_seq(%ebx), %eax @@ -310,9 +310,9 @@ __condvar_w_cleanup: 6: addl $1, wakeup_seq(%ebx) adcl $0, wakeup_seq+4(%ebx) + addl $1, cond_futex(%ebx) -7: addl $1, cond_futex(%ebx) - addl $1, woken_seq(%ebx) +7: addl $1, woken_seq(%ebx) adcl $0, woken_seq+4(%ebx) 3: subl $(1 << clock_bits), cond_nwaiters(%ebx) diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S index 6b8091b3ee..969e80da2a 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S @@ -67,15 +67,15 @@ __condvar_cleanup: cmpl 4(%r8), %edx jne 3f - /* We increment the woken_seq counter only if it is lower than + /* 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. */ movq total_seq(%rdi), %rax cmpq wakeup_seq(%rdi), %rax jbe 6f incq wakeup_seq(%rdi) -6: incq woken_seq(%rdi) incl cond_futex(%rdi) +6: incq woken_seq(%rdi) 3: subl $(1 << clock_bits), cond_nwaiters(%rdi) |