From: Ulrich Drepper Date: Sun, 19 Jul 2009 21:54:56 +0000 (-0700) Subject: Make x86-64 pthread_cond_timedwait more robust. X-Git-Tag: fedora/glibc-2.10.90-4~1^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=515a8908cedcf7432270f410e4a749e4ce07a072;p=thirdparty%2Fglibc.git Make x86-64 pthread_cond_timedwait more robust. It just happens that __pthread_enable_asynccancel doesn't modify the $rdi register. But this isn't guaranteed. Hence we reload the register after the calls. --- diff --git a/nptl/ChangeLog b/nptl/ChangeLog index e9cac734596..785100d8529 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2009-07-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S + (__pthread_cond_timedwait): Make more robust. + 2009-07-18 Ulrich Drepper * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S index 45a9a4213b4..1b19fdb8dc2 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S @@ -153,6 +153,7 @@ __pthread_cond_timedwait: .LcleanupSTART1: 34: callq __pthread_enable_asynccancel movl %eax, (%rsp) + movq 8(%rsp), %rdi movq %r13, %r10 cmpq $-1, dep_mutex(%rdi) @@ -456,6 +457,7 @@ __pthread_cond_timedwait: .LcleanupSTART2: 4: callq __pthread_enable_asynccancel movl %eax, (%rsp) + movq 8(%rsp), %rdi leaq 32(%rsp), %r10 cmpq $-1, dep_mutex(%rdi)