diff options
author | rpj <rpj> | 1999-04-03 22:05:39 +0000 |
---|---|---|
committer | rpj <rpj> | 1999-04-03 22:05:39 +0000 |
commit | 451bb0670ddd5f5c0606410f2b5f51733119645d (patch) | |
tree | 09e56af6c763e0c7874cce25ac700daf9f1e93a0 /condvar.c | |
parent | ad0b866780adf56e19114fb67ab2d532b4501425 (diff) |
./ChangeLog
Sun Apr 4 11:05:57 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* sched.c (sched.h): Include.
* sched.h: New file for POSIX 1b scheduling.
* pthread.h: Move opaque structures to implement.h; move sched_*
prototypes out and into sched.h.
* implement.h: Add opaque structures from pthread.h.
* sched.c (sched_yield): New function.
* condvar.c (_pthread_sem_*): Rename to sem_*; except for
_pthread_sem_timedwait which is an private function.
Sat Apr 3 23:28:00 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* Makefile.in (OBJS): Add errno.o.
Fri Apr 2 11:08:50 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* implement.h (_pthread_sem_*): Remove prototypes now defined in
semaphore.h.
* pthread.h (sempahore.h): Include.
* semaphore.h: New file for POSIX 1b semaphores.
* pthread.h (_pthread_sem_t): Change to sem_t.
* semaphore.c (_pthread_sem_*): Change to sem_*; these functions
will be exported from the library; set errno on error.
- John Bossom <jebossom@cognos.com>
(_pthread_sem_timedwait): Moved to private.c.
* private.c (_pthread_sem_timedwait): Moved from semaphore.c;
set errno on error.
* errno.c (_errno): New file. New function.
- John Bossom
* pthread.h (pthread_t_): Add per-thread errno element.
tests/ChangeLog
Sun Apr 4 12:04:28 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* tsd1.c (mythread): Change Sleep(0) to sched_yield().
(sched.h): Include.
* condvar3.c (mythread): Remove redundant Sleep().
* runtest.bat: Re-organised to make more informative.
Diffstat (limited to 'condvar.c')
-rw-r--r-- | condvar.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -375,7 +375,7 @@ pthread_cond_init (pthread_cond_t * cond, const pthread_condattr_t * attr) cv->waiters = 0; cv->wasBroadcast = FALSE; - if (_pthread_sem_init (&(cv->sema), 0, 0) != 0) + if (sem_init (&(cv->sema), 0, 0) != 0) { goto FAIL0; } @@ -408,7 +408,7 @@ FAIL2: (void) pthread_mutex_destroy (&(cv->waitersLock)); FAIL1: - (void) _pthread_sem_destroy (&(cv->sema)); + (void) sem_destroy (&(cv->sema)); FAIL0: DONE: @@ -468,7 +468,7 @@ pthread_cond_destroy (pthread_cond_t * cond) return EBUSY; } - (void) _pthread_sem_destroy (&(cv->sema)); + (void) sem_destroy (&(cv->sema)); (void) pthread_mutex_destroy (&(cv->waitersLock)); (void) CloseHandle (cv->waitersDone); @@ -522,7 +522,7 @@ cond_timedwait (pthread_cond_t * cond, * We keep the lock held just long enough to increment the count of * waiters by one (above). * Note that we can't keep it held across the - * call to _pthread_sem_wait since that will deadlock other calls + * call to sem_wait since that will deadlock other calls * to pthread_cond_signal */ if ((result = pthread_mutex_unlock (mutex)) == 0) @@ -541,7 +541,10 @@ cond_timedwait (pthread_cond_t * cond, */ pthread_cleanup_push (pthread_mutex_lock, mutex); - result = _pthread_sem_timedwait (&(cv->sema), abstime); + if (_pthread_sem_timedwait (&(cv->sema), abstime) == -1) + { + result = errno; + } pthread_cleanup_pop (0); } @@ -772,7 +775,7 @@ pthread_cond_signal (pthread_cond_t * cond) */ if (cv->waiters > 0) { - result = _pthread_sem_post (&(cv->sema)); + result = sem_post (&(cv->sema)); } return (result); @@ -843,7 +846,7 @@ pthread_cond_broadcast (pthread_cond_t * cond) */ for (i = cv->waiters; i > 0 && result == 0; i--) { - result = _pthread_sem_post (&(cv->sema)); + result = sem_post (&(cv->sema)); } if (cv->waiters > 0 && result == 0) |