diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-03-11 23:26:35 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-03-11 23:26:35 +0000 |
commit | 32a589b1ea1365c8651b0692d0350403fde7b6ff (patch) | |
tree | 77b94275bcf321370496c19d29267e8c66a8606d /nptl/sysdeps | |
parent | 3e976b962a84255b70bcf6d9751a9a35d3e987ab (diff) | |
download | glibc-32a589b1ea1365c8651b0692d0350403fde7b6ff.zip glibc-32a589b1ea1365c8651b0692d0350403fde7b6ff.tar.gz glibc-32a589b1ea1365c8651b0692d0350403fde7b6ff.tar.bz2 |
Update.
* cancellation.c (__pthread_enable_asynccancel_2): New function.
* pthreadP.h: Declare __pthread_enable_asynccancel_2.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
(__pthread_cond_timedwait): Use __pthread_enable_asynccancel_2
instead of __pthread_enable_asynccancel.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
(__pthread_cond_wait): Likewise.
* sysdeps/pthread/pthread_cond_timedwait.c
(__pthread_cond_timedwait): Likewise.
* sysdeps/pthread/pthread_cond_wait.c (__pthread_cond_wait): Likewise.
Diffstat (limited to 'nptl/sysdeps')
7 files changed, 14 insertions, 11 deletions
diff --git a/nptl/sysdeps/pthread/pthread_cond_timedwait.c b/nptl/sysdeps/pthread/pthread_cond_timedwait.c index 417f873..0635e6e 100644 --- a/nptl/sysdeps/pthread/pthread_cond_timedwait.c +++ b/nptl/sysdeps/pthread/pthread_cond_timedwait.c @@ -120,7 +120,7 @@ __pthread_cond_timedwait (cond, mutex, abstime) lll_mutex_unlock (cond->__data.__lock); /* Enable asynchronous cancellation. Required by the standard. */ - cbuffer.oldtype = __pthread_enable_asynccancel (); + __pthread_enable_asynccancel_2 (&cbuffer.oldtype); /* Wait until woken by signal or broadcast. Note that we truncate the 'val' value to 32 bits. */ diff --git a/nptl/sysdeps/pthread/pthread_cond_wait.c b/nptl/sysdeps/pthread/pthread_cond_wait.c index 78fcc7f..b681ef2 100644 --- a/nptl/sysdeps/pthread/pthread_cond_wait.c +++ b/nptl/sysdeps/pthread/pthread_cond_wait.c @@ -123,7 +123,7 @@ __pthread_cond_wait (cond, mutex) lll_mutex_unlock (cond->__data.__lock); /* Enable asynchronous cancellation. Required by the standard. */ - cbuffer.oldtype = __pthread_enable_asynccancel (); + __pthread_enable_asynccancel_2 (&cbuffer.oldtype); /* Wait until woken by signal or broadcast. Note that we truncate the 'val' value to 32 bits. */ @@ -133,7 +133,7 @@ __pthread_cond_wait (cond, mutex) __pthread_disable_asynccancel (cbuffer.oldtype); /* We are going to look at shared data again, so get the lock. */ - lll_mutex_lock(cond->__data.__lock); + lll_mutex_lock (cond->__data.__lock); /* Check whether we are eligible for wakeup. */ val = cond->__data.__wakeup_seq; 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 122be6f..f11a44e 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 @@ -108,8 +108,8 @@ __pthread_cond_timedwait: #endif jne 3f -4: call __pthread_enable_asynccancel - movl %eax, (%esp) +4: movl %esp, %eax + call __pthread_enable_asynccancel_2 /* Get the current time. */ movl %ebx, %edx @@ -145,6 +145,7 @@ __pthread_cond_timedwait: subl $wakeup_seq, %ebx movl %eax, %esi + movl (%esp), %eax call __pthread_disable_asynccancel /* Lock. */ 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 b3a49e7..c13c382 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 @@ -165,8 +165,8 @@ __pthread_cond_wait: #endif jne 3f -4: call __pthread_enable_asynccancel - movl %eax, (%esp) +4: movl %esp, %eax + call __pthread_enable_asynccancel_2 movl %esi, %ecx /* movl $FUTEX_WAIT, %ecx */ movl %edi, %edx @@ -175,6 +175,7 @@ __pthread_cond_wait: ENTER_KERNEL subl $wakeup_seq, %ebx + movl (%esp), %eax call __pthread_disable_asynccancel /* Lock. */ diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S index e7e1707..1585921 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S @@ -49,7 +49,7 @@ __lll_lock_wait: xorq %r10, %r10 /* No timeout. */ 1: - leal -1(%esi), %edx /* account for the preceeded xadd. */ + leaq -1(%rsi), %rdx /* account for the preceeded xadd. */ movq %r10, %rsi /* movl $FUTEX_WAIT, %ecx */ movq $SYS_futex, %rax syscall diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S index a494e0e..55e4ec4 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S @@ -50,7 +50,7 @@ __lll_mutex_lock_wait: xorq %r10, %r10 /* No timeout. */ 1: - leal 1(%esi), %edx /* account for the preceeded xadd. */ + leaq 1(%rsi), %rdx /* account for the preceeded xadd. */ movq %r10, %rsi /* movl $FUTEX_WAIT, %ecx */ movq $SYS_futex, %rax syscall 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 c15566f..193cc08 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 @@ -153,9 +153,10 @@ __pthread_cond_wait: #endif jne 3f -4: callq __pthread_enable_asynccancel - movq %rax, (%rsp) +4: movq %rsp, %edi + callq __pthread_enable_asynccancel_2 + movq 8(%rsp), %rdi xorq %r10, %r10 movq %r12, %rdx addq $wakeup_seq-cond_lock, %rdi |