summaryrefslogtreecommitdiffstats
path: root/testsuites
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
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')
-rw-r--r--testsuites/psxtests/ChangeLog7
-rw-r--r--testsuites/psxtests/psx05/init.c4
-rw-r--r--testsuites/psxtests/psxrwlock01/psxrwlock01.scn18
-rw-r--r--testsuites/psxtests/psxrwlock01/test.c45
4 files changed, 64 insertions, 10 deletions
diff --git a/testsuites/psxtests/ChangeLog b/testsuites/psxtests/ChangeLog
index 678be85245..f09ac1de62 100644
--- a/testsuites/psxtests/ChangeLog
+++ b/testsuites/psxtests/ChangeLog
@@ -1,5 +1,12 @@
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.
+
+2010-10-21 Joel Sherrill <joel.sherrill@oarcorp.com>
+
* Makefile.am, configure.ac: New test to ensure pthread_cond_wait() and
sleep() (e.g. interruptible blocking and sleeping) are interruptible
by signal.
diff --git a/testsuites/psxtests/psx05/init.c b/testsuites/psxtests/psx05/init.c
index 3f01b94e5a..70e2187828 100644
--- a/testsuites/psxtests/psx05/init.c
+++ b/testsuites/psxtests/psx05/init.c
@@ -430,9 +430,9 @@ void *POSIX_Init(
calculate_abstimeout( &times, -1, (TOD_NANOSECONDS_PER_SECOND / 2) );
status = pthread_mutex_timedlock( &Mutex_id, &times );
- if ( status != EBUSY )
+ if ( status != ETIMEDOUT )
printf( "status = %d\n", status );
- rtems_test_assert( status == EBUSY );
+ rtems_test_assert( status == ETIMEDOUT );
/* switch to idle */
diff --git a/testsuites/psxtests/psxrwlock01/psxrwlock01.scn b/testsuites/psxtests/psxrwlock01/psxrwlock01.scn
index 578c5f54c7..fb315f35f2 100644
--- a/testsuites/psxtests/psxrwlock01/psxrwlock01.scn
+++ b/testsuites/psxtests/psxrwlock01/psxrwlock01.scn
@@ -60,6 +60,7 @@ pthread_rwlock_destroy( &RWLock ) -- EBUSY
pthread_rwlock_unlock(RWLock) -- OK
ReadThread - pthread_rwlock_rdlock(RWLock) unblocked -- OK
ReadThread - pthread_rwlock_rdlock(RWLock) unblocked -- OK
+
pthread_rwlock_trywrlock(RWLock) -- OK
pthread_rwlock_trywrlock(&RWLock) -- EBUSY
Init: pthread_create - thread 1 OK
@@ -70,16 +71,27 @@ pthread_rwlock_unlock(RWLock) -- OK
WriteThread - pthread_rwlock_wrlock(RWLock) unblocked -- OK
WriteThread - pthread_rwlock_unlock(RWLock) -- OK
WriteThread - pthread_rwlock_wrlock(RWLock) unblocked -- OK
+WriteThread - pthread_rwlock_unlock(RWLock) -- OK
+
+pthread_rwlock_tryrdlock(&RWLock) -- OK
+Init: pthread_create - thread reader & writer OK
+WriteThread - pthread_rwlock_wrlock(RWLock) blocking -- OK
+ReadThread - pthread_rwlock_rdlock(RWLock) blocking -- OK
+pthread_rwlock_tryrdlock(&RWLock) -- EBUSY
+pthread_rwlock_trywrlock(&RWLock) -- EBUSY
+pthread_rwlock_unlock(&RWLock) -- OK
+WriteThread - pthread_rwlock_wrlock(RWLock) unblocked -- OK
+WriteThread - pthread_rwlock_unlock(RWLock) -- OK
+ReadThread - pthread_rwlock_rdlock(RWLock) unblocked -- OK
clock_gettime(CLOCK_REALTIME, &abstime) -- OK
pthread_rwlock_timedwrlock( &RWLock, &abstime) -- OK
-WriteThread - pthread_rwlock_unlock(RWLock) -- OK
pthread_rwlock_timedrdlock( &RWLock, &abstime) -- ETIMEDOUT
pthread_rwlock_timedrdlock( &RWLock, &abstime) -- ETIMEDOUT
pthread_rwlock_timedwrlock( &RWLock, &abstime) -- ETIMEDOUT
pthread_rwlock_timedrdlock( &RWLock, &abstime) -- in past -- OK
pthread_rwlock_timedwrlock( &RWLock, &abstime) -- in past -- OK
pthread_rwlock_destroy( &RWLock ) -- OK
-pthread_rwlock_init( &rwlock, NULL ) -- OK
-pthread_rwlock_unlock ( &rwlock ) -- OK
+pthread_rwlock_init( &rwlock, NULL ) -- OK
+pthread_rwlock_unlock ( &rwlock ) -- OK
pthread_rwlock_unlock ( &rwlock ) -- OK
*** END OF POSIX RWLOCK TEST 01 ***
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" );