diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-01-03 08:14:47 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-01-03 08:14:47 +0000 |
commit | 842d28175225c0e964a723603bd11736ee29334f (patch) | |
tree | 0a5da645e49d2726d4955461cab2584621f3273a /nptl/sysdeps | |
parent | 0e07706e5b3ee66520170e8440b731903b1ccf6d (diff) | |
download | glibc-842d28175225c0e964a723603bd11736ee29334f.tar.gz glibc-842d28175225c0e964a723603bd11736ee29334f.tar.xz glibc-842d28175225c0e964a723603bd11736ee29334f.zip |
Update.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S (__pthread_cond_wait): Don't save cancellation mode and seq value in same location.
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S index 1cbf2ea97a..0187bf8253 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -141,8 +141,8 @@ __pthread_cond_wait: /* Get and store current wakeup_seq value. */ movl wakeup_seq(%ebx), %edi movl wakeup_seq+4(%ebx), %edx - movl %edi, (%esp) - movl %edx, 4(%esp) + movl %edi, 4(%esp) + movl %edx, 8(%esp) /* Unlock. */ 8: LOCK @@ -182,10 +182,10 @@ __pthread_cond_wait: movl wakeup_seq(%ebx), %edi movl wakeup_seq+4(%ebx), %edx - cmpl 4(%esp), %ecx + cmpl 8(%esp), %ecx ja 7f jb 8b - cmpl (%esp), %eax + cmpl 4(%esp), %eax jb 8b 7: cmpl %ecx, %edx @@ -503,7 +503,11 @@ __pthread_cond_signal: /* Get internal lock. */ movl $1, %eax LOCK +#if cond_lock == 0 + xaddl %eax, (%ebx) +#else xaddl %eax, cond_lock(%ebx) +#endif testl %eax, %eax jne 1f @@ -531,7 +535,11 @@ __pthread_cond_signal: /* Unlock. */ 4: LOCK +#if cond_lock == 0 + decl (%ebx) +#else decl cond_lock(%ebx) +#endif jne 5f 6: xorl %eax, %eax @@ -580,7 +588,11 @@ __pthread_cond_broadcast: /* Get internal lock. */ movl $1, %eax LOCK +#if cond_lock == 0 + xaddl %eax, (%ebx) +#else xaddl %eax, cond_lock(%ebx) +#endif testl %eax, %eax jne 1f @@ -608,7 +620,11 @@ __pthread_cond_broadcast: /* Unlock. */ 4: LOCK +#if cond_lock == 0 + decl (%ebx) +#else decl cond_lock(%ebx) +#endif jne 5f 6: xorl %eax, %eax |