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.
+2009-07-19 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+ (__pthread_cond_timedwait): Make more robust.
+
2009-07-18 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
.LcleanupSTART1:
34: callq __pthread_enable_asynccancel
movl %eax, (%rsp)
+ movq 8(%rsp), %rdi
movq %r13, %r10
cmpq $-1, dep_mutex(%rdi)
.LcleanupSTART2:
4: callq __pthread_enable_asynccancel
movl %eax, (%rsp)
+ movq 8(%rsp), %rdi
leaq 32(%rsp), %r10
cmpq $-1, dep_mutex(%rdi)