Skip to content

Commit

Permalink
Fix pthread_cond_*wait with requeue-PI on i386.
Browse files Browse the repository at this point in the history
  • Loading branch information
Michal Schmidt authored and Ulrich Drepper committed Jan 16, 2010
1 parent aa732e2 commit 893549c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 11 deletions.
13 changes: 13 additions & 0 deletions nptl/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
2010-01-15 Ulrich Drepper <drepper@redhat.com>

* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S:
Fix unwind info.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.

2010-01-15 Michal Schmidt <mschmidt@redhat.com>

* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S:
Fix pthread_cond_timedwait with requeue-PI.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S:
Fix pthread_cond_wait with requeue-PI.

2010-01-14 Ulrich Drepper <drepper@redhat.com>

* Versions: Add pthread_mutex_consistent, pthread_mutexattr_getrobust,
Expand Down
12 changes: 6 additions & 6 deletions nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (C) 2002-2004, 2006-2007, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2002-2004,2006-2007,2009,2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
Expand Down Expand Up @@ -57,7 +57,6 @@ __pthread_cond_timedwait:
pushl %ebx
cfi_adjust_cfa_offset(4)
cfi_rel_offset(%ebx, 0)
cfi_remember_state

movl 20(%esp), %ebx
movl 28(%esp), %ebp
Expand Down Expand Up @@ -99,6 +98,7 @@ __pthread_cond_timedwait:
#define FRAME_SIZE 32
subl $FRAME_SIZE, %esp
cfi_adjust_cfa_offset(FRAME_SIZE)
cfi_remember_state

/* Get and store current wakeup_seq value. */
movl wakeup_seq(%ebx), %edi
Expand Down Expand Up @@ -326,14 +326,12 @@ __pthread_cond_timedwait:
#endif
jne 10f

11: xorl %eax, %eax
11: movl 24+FRAME_SIZE(%esp), %eax
/* With requeue_pi, the mutex lock is held in the kernel. */
movl 24(%esp), %ecx
testl %ecx, %ecx
jnz 26f
jnz 27f

/* Remove cancellation handler. */
movl 24+FRAME_SIZE(%esp), %eax
call __pthread_mutex_cond_lock
26: addl $FRAME_SIZE, %esp
cfi_adjust_cfa_offset(-FRAME_SIZE);
Expand Down Expand Up @@ -366,8 +364,10 @@ __pthread_cond_timedwait:
cfi_restore_state

27: call __pthread_mutex_cond_lock_adjust
xorl %eax, %eax
jmp 26b

cfi_adjust_cfa_offset(-FRAME_SIZE);
/* Initial locking failed. */
1:
#if cond_lock == 0
Expand Down
10 changes: 5 additions & 5 deletions nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (C) 2002-2004, 2006-2007, 2009 Free Software Foundation, Inc.
/* Copyright (C) 2002-2004,2006-2007,2009,2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
Expand Down Expand Up @@ -57,7 +57,6 @@ __pthread_cond_wait:
pushl %ebx
cfi_adjust_cfa_offset(4)
cfi_rel_offset(%ebx, 0)
cfi_remember_state

xorl %esi, %esi
movl 20(%esp), %ebx
Expand Down Expand Up @@ -95,6 +94,7 @@ __pthread_cond_wait:
#define FRAME_SIZE 20
subl $FRAME_SIZE, %esp
cfi_adjust_cfa_offset(FRAME_SIZE)
cfi_remember_state

/* Get and store current wakeup_seq value. */
movl wakeup_seq(%ebx), %edi
Expand Down Expand Up @@ -247,12 +247,11 @@ __pthread_cond_wait:
jne 10f

/* With requeue_pi, the mutex lock is held in the kernel. */
11: xorl %eax, %eax
11: movl 24+FRAME_SIZE(%esp), %eax
movl 16(%esp), %ecx
testl %ecx, %ecx
jnz 20f
jnz 21f

movl 24+FRAME_SIZE(%esp), %eax
call __pthread_mutex_cond_lock
20: addl $FRAME_SIZE, %esp
cfi_adjust_cfa_offset(-FRAME_SIZE);
Expand All @@ -279,6 +278,7 @@ __pthread_cond_wait:
xorl %eax, %eax
jmp 20b

cfi_adjust_cfa_offset(-FRAME_SIZE);
/* Initial locking failed. */
1:
#if cond_lock == 0
Expand Down

0 comments on commit 893549c

Please sign in to comment.