summaryrefslogtreecommitdiffstats
path: root/testsuites/psxtests/psxrwlock01/test.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-10-21 22:09:44 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-10-21 22:09:44 +0000
commit8e9a25ac02292bd74e9889800784e55f55fced25 (patch)
treee7c5cec1ef987a75da7f94e2556455aadda523d7 /testsuites/psxtests/psxrwlock01/test.c
parent2010-10-21 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-8e9a25ac02292bd74e9889800784e55f55fced25.tar.bz2
2010-10-21 Joel Sherrill <joel.sherrill@oarcorp.com>
* psx05/init.c: Check for correct status returned. * psxrwlock01/psxrwlock01.scn, psxrwlock01/test.c: Add test code to exercise path when attempting to lock for reading but there is at least one writer blocked waiting for access.
Diffstat (limited to 'testsuites/psxtests/psxrwlock01/test.c')
-rw-r--r--testsuites/psxtests/psxrwlock01/test.c45
1 files changed, 40 insertions, 5 deletions
diff --git a/testsuites/psxtests/psxrwlock01/test.c b/testsuites/psxtests/psxrwlock01/test.c
index 433d8b2e36..83d0a0527d 100644
--- a/testsuites/psxtests/psxrwlock01/test.c
+++ b/testsuites/psxtests/psxrwlock01/test.c
@@ -1,7 +1,7 @@
/*
* This test exercises the POSIX RWLock manager.
*
- * COPYRIGHT (c) 1989-2009.
+ * COPYRIGHT (c) 1989-2010.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
@@ -57,10 +57,12 @@ void *WriteLockThread(void *arg)
rtems_test_assert( !status );
puts( "WriteThread - pthread_rwlock_wrlock(RWLock) unblocked -- OK" );
- sleep( 1 );
+ sleep( 2 );
puts( "WriteThread - pthread_rwlock_unlock(RWLock) -- OK" );
status = pthread_rwlock_unlock(&RWLock);
+ if ( status )
+ printf( "status=%s\n", strerror(status) );
rtems_test_assert( !status );
return NULL;
}
@@ -340,7 +342,7 @@ int main(
sleep(2);
/*************** CREATE THREADS AND LET THEM OBTAIN WRITE LOCK *************/
- puts( "pthread_rwlock_trywrlock(RWLock) -- OK" );
+ puts( "\npthread_rwlock_trywrlock(RWLock) -- OK" );
status = pthread_rwlock_trywrlock(&RWLock);
rtems_test_assert( !status );
@@ -354,14 +356,47 @@ int main(
pthread_create(&ThreadIds[i], NULL, WriteLockThread, &ThreadIds[i]);
rtems_test_assert( !status );
- sleep(1);
+ sleep(2);
}
puts( "pthread_rwlock_unlock(RWLock) -- OK" );
status = pthread_rwlock_unlock(&RWLock);
rtems_test_assert( !status );
- sleep(2);
+ sleep(6);
+
+ /*************** CREATE THREADS AND LET THEM OBTAIN WRITE LOCK *************/
+ /*************** THEN ATTEMPT TO OBTAIN A READLOCK *************/
+
+ puts( "\npthread_rwlock_tryrdlock(&RWLock) -- OK" );
+ status = pthread_rwlock_tryrdlock(&RWLock);
+ rtems_test_assert( !status );
+
+ printf( "Init: pthread_create - thread reader & writer OK\n" );
+ status = pthread_create(&ThreadIds[0], NULL, WriteLockThread, &ThreadIds[0]);
+ rtems_test_assert( !status );
+
+ sleep(1);
+ status = pthread_create(&ThreadIds[1], NULL, ReadLockThread, &ThreadIds[1]);
+ rtems_test_assert( !status );
+
+ sleep(1);
+
+ puts( "pthread_rwlock_tryrdlock(&RWLock) -- EBUSY" );
+ status = pthread_rwlock_tryrdlock(&RWLock);
+ rtems_test_assert( status == EBUSY );
+
+ puts( "pthread_rwlock_trywrlock(&RWLock) -- EBUSY" );
+ status = pthread_rwlock_trywrlock(&RWLock);
+ rtems_test_assert( status == EBUSY );
+
+ sleep( 5 );
+
+ puts( "pthread_rwlock_unlock(&RWLock) -- OK" );
+ status = pthread_rwlock_unlock(&RWLock);
+ rtems_test_assert( !status );
+
+ sleep( 5 );
/*************** TIMEOUT ON RWLOCK ***************/
puts( "clock_gettime(CLOCK_REALTIME, &abstime) -- OK" );