Skip to content

Commit

Permalink
Update.
Browse files Browse the repository at this point in the history
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S:
	Release lock before waking up the waiters.
  • Loading branch information
Ulrich Drepper committed Feb 27, 2003
1 parent 427f5fa commit 567fb22
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 6 deletions.
3 changes: 3 additions & 0 deletions nptl/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
2003-02-27 Ulrich Drepper <drepper@redhat.com>

* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S:
Release lock before waking up the waiters.

* tst-exit1.c (do_test): Don't start more than one thread in parallel.

* tst-rwlock9.c (writer_thread): Correct adding TIMEOUT.
Expand Down
21 changes: 18 additions & 3 deletions nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,24 @@ __pthread_cond_broadcast:
3: movl %ecx, (%ebx)
movl %eax, 4(%ebx)

/* Unlock. */
LOCK
decl cond_lock-wakeup_seq(%ebx)
jne 7f

/* Wake up all threads. */
movl $FUTEX_WAKE, %ecx
8: movl $FUTEX_WAKE, %ecx
xorl %esi, %esi
movl $SYS_futex, %eax
movl $0x7fffffff, %edx
ENTER_KERNEL

xorl %eax, %eax
popl %ebx
popl %esi
ret

.align 16
/* Unlock. */
4: LOCK
decl cond_lock-wakeup_seq(%ebx)
Expand All @@ -98,10 +109,14 @@ __pthread_cond_broadcast:
jmp 2b

/* Unlock in loop requires waekup. */
5:
leal cond_lock-wakeup_seq(%ebx), %eax
5: leal cond_lock-wakeup_seq(%ebx), %eax
call __lll_mutex_unlock_wake
jmp 6b

/* Unlock in loop requires waekup. */
7: leal cond_lock-wakeup_seq(%ebx), %eax
call __lll_mutex_unlock_wake
jmp 8b
.size __pthread_cond_broadcast, .-__pthread_cond_broadcast
versioned_symbol (libpthread, __pthread_cond_broadcast, pthread_cond_broadcast,
GLIBC_2_3_2)
4 changes: 1 addition & 3 deletions nptl/tst-exit1.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
#include <stdio.h>
#include <stdlib.h>

#define N 20

static pthread_barrier_t b;


Expand All @@ -46,7 +44,7 @@ tf (void *arg)
static int
do_test (void)
{
if (pthread_barrier_init (&b, NULL, N + 1) != 0)
if (pthread_barrier_init (&b, NULL, 2) != 0)
{
puts ("barrier_init failed");
exit (1);
Expand Down

0 comments on commit 567fb22

Please sign in to comment.