diff options
author | Andreas Schwab <schwab@redhat.com> | 2009-11-27 21:37:30 -0800 |
---|---|---|
committer | Petr Baudis <pasky@ucw.cz> | 2009-12-04 14:52:25 +0100 |
commit | 1db8b35487c8c3842f81176c25e72e4cf0948f00 (patch) | |
tree | aad3d850953296bb9721c260459e126004a71c08 | |
parent | bc207ace446b2e0fc4a474a2a4cf945d9cca6573 (diff) | |
download | glibc-1db8b35487c8c3842f81176c25e72e4cf0948f00.tar.gz glibc-1db8b35487c8c3842f81176c25e72e4cf0948f00.tar.xz glibc-1db8b35487c8c3842f81176c25e72e4cf0948f00.zip |
Fix infloop in __pthread_disable_asynccancel on x86_64
(cherry picked from commit b55ec98c6490b944593243c7da54dda1796e3f84)
-rw-r--r-- | nptl/ChangeLog | 5 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 0aaaa3f7b9..08a55ee5c8 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2009-11-27 Andreas Schwab <schwab@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/cancellation.S: Reload + THREAD_SELF->cancelhandling after returning from futex call. + 2009-11-03 Andreas Schwab <schwab@linux-m68k.org> [BZ #4457] diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S b/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S index 0d48ec6fcd..680696200a 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S @@ -96,8 +96,8 @@ ENTRY(__pthread_disable_asynccancel) cmpxchgl %r11d, %fs:CANCELHANDLING jnz 2b -3: movl %r11d, %eax - andl $(TCB_CANCELING_BITMASK|TCB_CANCELED_BITMASK), %eax + movl %r11d, %eax +3: andl $(TCB_CANCELING_BITMASK|TCB_CANCELED_BITMASK), %eax cmpl $TCB_CANCELING_BITMASK, %eax je 4f 1: ret @@ -111,5 +111,6 @@ ENTRY(__pthread_disable_asynccancel) addq $CANCELHANDLING, %rdi LOAD_PRIVATE_FUTEX_WAIT (%esi) syscall + movl %fs:CANCELHANDLING, %eax jmp 3b END(__pthread_disable_asynccancel) |