2003-03-16  Ulrich Drepper  <drepper@redhat.com>

	* tst-rwlock6.c: Add some more status output.
This commit is contained in:
Ulrich Drepper 2003-03-16 08:09:26 +00:00
parent ad032aee17
commit 51d0678c29
4 changed files with 36 additions and 9 deletions

View File

@ -1,3 +1,7 @@
2003-03-16 Ulrich Drepper <drepper@redhat.com>
* tst-rwlock6.c: Add some more status output.
2003-03-15 Roland McGrath <roland@redhat.com> 2003-03-15 Roland McGrath <roland@redhat.com>
* sysdeps/pthread/configure.in: New file. * sysdeps/pthread/configure.in: New file.

View File

@ -45,6 +45,7 @@
pthread_rwlock_timedrdlock: pthread_rwlock_timedrdlock:
pushq %r12 pushq %r12
pushq %r13 pushq %r13
pushq %r14
subq $16, %rsp subq $16, %rsp
movq %rdi, %r12 movq %rdi, %r12
@ -76,14 +77,14 @@ pthread_rwlock_timedrdlock:
incl READERS_QUEUED(%r12) incl READERS_QUEUED(%r12)
je 4f je 4f
movl READERS_WAKEUP(%r12), %edx movl READERS_WAKEUP(%r12), %r14d
/* Unlock. */ /* Unlock. */
LOCK LOCK
#if MUTEX == 0 #if MUTEX == 0
subl $1, (%r12) decl (%r12)
#else #else
subl $1, MUTEX(%r12) decl MUTEX(%r12)
#endif #endif
jne 10f jne 10f
@ -112,7 +113,8 @@ pthread_rwlock_timedrdlock:
movq %rdi, 8(%rsp) movq %rdi, 8(%rsp)
xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */
xorq %r10, %r10 movq %rsp, %r10
movl %r14d, %edx
leaq READERS_WAKEUP(%r12), %rdi leaq READERS_WAKEUP(%r12), %rdi
movq $SYS_futex, %rax movq $SYS_futex, %rax
syscall syscall
@ -152,6 +154,7 @@ pthread_rwlock_timedrdlock:
7: movq %rdx, %rax 7: movq %rdx, %rax
addq $16, %rsp addq $16, %rsp
popq %r14
popq %r13 popq %r13
popq %r12 popq %r12
retq retq

View File

@ -44,6 +44,7 @@
pthread_rwlock_timedwrlock: pthread_rwlock_timedwrlock:
pushq %r12 pushq %r12
pushq %r13 pushq %r13
pushq %r14
subq $16, %rsp subq $16, %rsp
movq %rdi, %r12 movq %rdi, %r12
@ -73,7 +74,7 @@ pthread_rwlock_timedwrlock:
incl WRITERS_QUEUED(%r12) incl WRITERS_QUEUED(%r12)
je 4f je 4f
movl WRITERS_WAKEUP(%r12), %edx movl WRITERS_WAKEUP(%r12), %r14d
LOCK LOCK
#if MUTEX == 0 #if MUTEX == 0
@ -109,6 +110,7 @@ pthread_rwlock_timedwrlock:
xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */
movq %rsp, %r10 movq %rsp, %r10
movl %r14d, %edx
leaq WRITERS_WAKEUP(%r12), %rdi leaq WRITERS_WAKEUP(%r12), %rdi
movq $SYS_futex, %rax movq $SYS_futex, %rax
syscall syscall
@ -134,7 +136,7 @@ pthread_rwlock_timedwrlock:
jmp 9f jmp 9f
5: xorq %rcx, %rdx 5: xorq %rdx, %rdx
movq %fs:SELF, %rax movq %fs:SELF, %rax
movq %rax, WRITER(%r12) movq %rax, WRITER(%r12)
9: LOCK 9: LOCK
@ -148,6 +150,7 @@ pthread_rwlock_timedwrlock:
7: movq %rdx, %rax 7: movq %rdx, %rax
addq $16, %rsp addq $16, %rsp
popq %r14
popq %r13 popq %r13
popq %r12 popq %r12
retq retq

View File

@ -51,6 +51,8 @@ tf (void *arg)
++ts.tv_sec; ++ts.tv_sec;
} }
puts ("child calling timedrdlock");
int err = pthread_rwlock_timedrdlock (r, &ts); int err = pthread_rwlock_timedrdlock (r, &ts);
if (err == 0) if (err == 0)
{ {
@ -65,6 +67,8 @@ tf (void *arg)
pthread_exit ((void *) 1l); pthread_exit ((void *) 1l);
} }
puts ("1st child timedrdlock done");
struct timeval tv2; struct timeval tv2;
(void) gettimeofday (&tv2, NULL); (void) gettimeofday (&tv2, NULL);
@ -94,6 +98,8 @@ tf (void *arg)
pthread_exit ((void *) 1l); pthread_exit ((void *) 1l);
} }
puts ("2nd child timedrdlock done");
return NULL; return NULL;
} }
@ -140,16 +146,19 @@ do_test (void)
++ts.tv_sec; ++ts.tv_sec;
/* Get a write lock. */ /* Get a write lock. */
if (pthread_rwlock_timedwrlock (&r, &ts) != 0) int e = pthread_rwlock_timedwrlock (&r, &ts);
if (e != 0)
{ {
printf ("round %d: rwlock_wrlock failed\n", cnt); printf ("round %d: rwlock_timedwrlock failed (%d)\n", cnt, e);
exit (1); exit (1);
} }
puts ("1st timedwrlock done");
(void) gettimeofday (&tv, NULL); (void) gettimeofday (&tv, NULL);
TIMEVAL_TO_TIMESPEC (&tv, &ts); TIMEVAL_TO_TIMESPEC (&tv, &ts);
++ts.tv_sec; ++ts.tv_sec;
int e = pthread_rwlock_timedrdlock (&r, &ts); e = pthread_rwlock_timedrdlock (&r, &ts);
if (e == 0) if (e == 0)
{ {
puts ("timedrdlock succeeded"); puts ("timedrdlock succeeded");
@ -161,6 +170,8 @@ do_test (void)
exit (1); exit (1);
} }
puts ("1st timedrdlock done");
(void) gettimeofday (&tv, NULL); (void) gettimeofday (&tv, NULL);
TIMEVAL_TO_TIMESPEC (&tv, &ts); TIMEVAL_TO_TIMESPEC (&tv, &ts);
++ts.tv_sec; ++ts.tv_sec;
@ -176,6 +187,8 @@ do_test (void)
exit (1); exit (1);
} }
puts ("2nd timedwrlock done");
pthread_t th; pthread_t th;
if (pthread_create (&th, NULL, tf, &r) != 0) if (pthread_create (&th, NULL, tf, &r) != 0)
{ {
@ -183,6 +196,8 @@ do_test (void)
exit (1); exit (1);
} }
puts ("started thread");
void *status; void *status;
if (pthread_join (th, &status) != 0) if (pthread_join (th, &status) != 0)
{ {
@ -195,6 +210,8 @@ do_test (void)
exit (1); exit (1);
} }
puts ("joined thread");
if (pthread_rwlock_destroy (&r) != 0) if (pthread_rwlock_destroy (&r) != 0)
{ {
printf ("round %d: rwlock_destroy failed\n", cnt); printf ("round %d: rwlock_destroy failed\n", cnt);