diff options
| author | rpj <rpj> | 1999-09-15 00:56:21 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 1999-09-15 00:56:21 +0000 | 
| commit | 9031537658e89136c6a5bb959f9b9a4338a5d056 (patch) | |
| tree | 0cb7c7695e5ac67fac829f1923a9238eea2f8efb /tests | |
| parent | ddce48cadf17ad0b75d6c57062106b700a73d738 (diff) | |
Sat Sep 10 12:56:13 1999  Ross Johnson  <rpj@swan.canberra.edu.au>
        The following code for POSIX read/write locks was contributed
        by Aurelio Medina.
        * implement.h (pthread_rwlock_t_): Add.
        * pthread.h (pthread_rwlock_t): Add.
        (PTHREAD_RWLOCK_INITIALIZER): Add.
        Add rwlock function prototypes.
        * rwlock.c: New module.
        * pthread.def: Add new rwlock functions.
        * private.c (_pthread_processInitialize): initialise
        _pthread_rwlock_test_init_lock critical section.
        * global.c (_pthread_rwlock_test_init_lock): Add.
        * mutex.c (pthread_mutex_destroy): Don't free mutex memory
        if mutex is PTHREAD_MUTEX_INITIALIZER and has not been
        initialised yet.
tests/ChangeLog
Sep 15 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * rwlock1.c: New test.
        * rwlock2.c: New test.
        * rwlock3.c: New test.
        * rwlock4.c: New test.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ChangeLog | 7 | ||||
| -rw-r--r-- | tests/runall.bat | 4 | ||||
| -rw-r--r-- | tests/rwlock1.c | 31 | ||||
| -rw-r--r-- | tests/rwlock2.c | 34 | ||||
| -rw-r--r-- | tests/rwlock3.c | 44 | ||||
| -rw-r--r-- | tests/rwlock4.c | 44 | 
6 files changed, 164 insertions, 0 deletions
| diff --git a/tests/ChangeLog b/tests/ChangeLog index 1ee3634..4ee832c 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +Sep 15 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au> + +	* rwlock1.c: New test. +	* rwlock2.c: New test. +	* rwlock3.c: New test. +	* rwlock4.c: New test. +  Aug 22 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>  	* runall.bat (join2): Add test. diff --git a/tests/runall.bat b/tests/runall.bat index 8086fc3..78a94b6 100644 --- a/tests/runall.bat +++ b/tests/runall.bat @@ -25,3 +25,7 @@ call runtest cl condvar4  call runtest cl condvar5  call runtest cl condvar6  call runtest cl errno1 +call runtest cl rwlock1 +call runtest cl rwlock2 +call runtest cl rwlock3 +call runtest cl rwlock4 diff --git a/tests/rwlock1.c b/tests/rwlock1.c new file mode 100644 index 0000000..540ef7a --- /dev/null +++ b/tests/rwlock1.c @@ -0,0 +1,31 @@ +/*  + * rwlock1.c + * + * Create a simple rwlock object, lock it, and then unlock it again. + * + * Depends on API functions: + * 	pthread_rwlock_init() + *	pthread_rwlock_lock() + *	pthread_rwlock_unlock() + *	pthread_rwlock_destroy() + */ + +#include "test.h" + +pthread_rwlock_t rwlock = NULL; + +int +main() +{ +  assert(rwlock == NULL); + +  assert(pthread_rwlock_init(&rwlock, NULL) == 0); + +  assert(rwlock != NULL); + +  assert(pthread_rwlock_destroy(&rwlock) == 0); + +  assert(rwlock == NULL); + +  return 0; +} diff --git a/tests/rwlock2.c b/tests/rwlock2.c new file mode 100644 index 0000000..cfb3228 --- /dev/null +++ b/tests/rwlock2.c @@ -0,0 +1,34 @@ +/*  + * rwlock2.c + * + * Declare a static rwlock object, lock it,  + * and then unlock it again. + * + * Depends on API functions:  + *	pthread_rwlock_rdlock() + *	pthread_rwlock_unlock() + */ + +#include "test.h" +  +pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER; + +int +main() +{ +  assert(rwlock == PTHREAD_RWLOCK_INITIALIZER); + +  assert(pthread_rwlock_rdlock(&rwlock) == 0); + +  assert(rwlock != PTHREAD_RWLOCK_INITIALIZER); + +  assert(rwlock != NULL); + +  assert(pthread_rwlock_unlock(&rwlock) == 0); + +  assert(pthread_rwlock_destroy(&rwlock) == 0); + +  assert(rwlock == NULL); + +  return 0; +} diff --git a/tests/rwlock3.c b/tests/rwlock3.c new file mode 100644 index 0000000..92e8286 --- /dev/null +++ b/tests/rwlock3.c @@ -0,0 +1,44 @@ +/*  + * rwlock3.c + * + * Declare a static rwlock object, lock it, trylock it,  + * and then unlock it again. + * + * Depends on API functions:  + *	pthread_rwlock_wrlock() + *	pthread_rwlock_trywrlock() + *	pthread_rwlock_unlock() + */ + +#include "test.h" +  +pthread_rwlock_t rwlock1 = PTHREAD_RWLOCK_INITIALIZER; + +static int washere = 0; + +void * func(void * arg) +{ +  assert(pthread_rwlock_trywrlock(&rwlock1) == EBUSY); + +  washere = 1; + +  return 0;  +} +  +int +main() +{ +  pthread_t t; + +  assert(pthread_rwlock_wrlock(&rwlock1) == 0); + +  assert(pthread_create(&t, NULL, func, NULL) == 0); + +  Sleep(2000); + +  assert(pthread_rwlock_unlock(&rwlock1) == 0); + +  assert(washere == 1); + +  return 0; +} diff --git a/tests/rwlock4.c b/tests/rwlock4.c new file mode 100644 index 0000000..07e4cff --- /dev/null +++ b/tests/rwlock4.c @@ -0,0 +1,44 @@ +/*  + * rwlock3.c + * + * Declare a static rwlock object, rdlock it, trywrlock it,  + * and then unlock it again. + * + * Depends on API functions:  + *	pthread_rwlock_rdlock() + *	pthread_rwlock_trywrlock() + *	pthread_rwlock_unlock() + */ + +#include "test.h" +  +pthread_rwlock_t rwlock1 = PTHREAD_RWLOCK_INITIALIZER; + +static int washere = 0; + +void * func(void * arg) +{ +  assert(pthread_rwlock_trywrlock(&rwlock1) == EBUSY); + +  washere = 1; + +  return 0;  +} +  +int +main() +{ +  pthread_t t; + +  assert(pthread_rwlock_rdlock(&rwlock1) == 0); + +  assert(pthread_create(&t, NULL, func, NULL) == 0); + +  Sleep(2000); + +  assert(pthread_rwlock_unlock(&rwlock1) == 0); + +  assert(washere == 1); + +  return 0; +} | 
