summaryrefslogtreecommitdiffstats
path: root/testsuites/psxtests/psxrwlock01/test.c
diff options
context:
space:
mode:
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" );