diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | condvar.c | 4 | ||||
-rw-r--r-- | private.c | 60 | ||||
-rw-r--r-- | semaphore.c | 64 | ||||
-rw-r--r-- | tests/ChangeLog | 4 | ||||
-rw-r--r-- | tests/runtest.bat | 9 |
6 files changed, 86 insertions, 67 deletions
@@ -1,3 +1,15 @@ +Sun Jan 17 12:01:26 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> + + * private.c (_pthread_sem_timedwait): Move from semaphore.c. + + * semaphore.c : Remove redundant #includes. + (_pthread_sem_timedwait): Move to private.c. + (sem_wait): Add missing abstime arg to pthreadCancelableWait() call. + +Fri Jan 15 23:38:05 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> + + * condvar.c (cond_timedwait): Remove comment. + Fri Jan 15 15:41:28 1999 Ross Johnson <rpj@swan.canberra.edu.au> * pthread.h: Add new 'abstime' arg to pthreadCancelableWait() @@ -413,10 +413,6 @@ cond_timedwait (pthread_cond_t * cond, /* * OK to increment cv->waiters because the caller locked 'mutex' - * - * [RPJ] FIXME: This can still lead to race conditions, which I think - * are NOT the same as the unpredictable scheduling behaviour noted in the - * POSIX Pthread specs. */ cv->waiters++; @@ -437,3 +437,63 @@ _pthread_callUserDestroyRoutines (pthread_t thread) /* </JEB> */ + +int +_pthread_sem_timedwait (sem_t * sem, const struct timespec * abstime) + /* + * ------------------------------------------------------ + * DOCPUBLIC + * This function waits on a semaphore for at most + * 'abstime'. + * + * PARAMETERS + * sem + * pointer to an instance of sem_t + * + * abstime + * pointer to an instance of struct timespec + * + * DESCRIPTION + * This function waits on a semaphore. If the + * semaphore value is greater than zero, it decreases + * its value by one. If the semaphore value is zero, then + * the calling thread (or process) is blocked until it can + * successfully decrease the value or until interrupted by + * a signal. + * + * If 'abstime' is a NULL pointer then this function will + * block until it can successfully decrease the value or + * until interrupted by a signal. + * + * RESULTS + * 0 successfully decreased semaphore, + * EINVAL 'sem' is not a valid semaphore, + * ENOSYS semaphores are not supported, + * EINTR the function was interrupted by a signal, + * EDEADLK a deadlock condition was detected. + * ETIMEDOUT abstime elapsed before success. + * + * ------------------------------------------------------ + */ +{ + DWORD msecs; + + if (abstime == NULL) + { + msecs = INFINITE; + } + else + { + /* Calculate the number of milliseconds in abstime. */ + msecs = abstime->tv_sec * 1000; + msecs += abstime->tv_nsec / 1000000; + } + + return ((sem == NULL) + ? EINVAL + : pthreadCancelableWait (*sem, msecs) + ); + +} /* _pthread_sem_timedwait */ + + diff --git a/semaphore.c b/semaphore.c index fc24b1a..9200cdd 100644 --- a/semaphore.c +++ b/semaphore.c @@ -35,9 +35,6 @@ * ------------------------------------------------------------- */ #include <pthread.h> -#include <windows.h> -#include <process.h> -#include <errno.h> #include <string.h> #include "semaphore.h" @@ -215,66 +212,7 @@ sem_wait (sem_t * sem) return ((sem == NULL) ? EINVAL - : pthreadCancelableWait (*sem) - ); - -} /* sem_wait */ - - -int -_pthread_sem_timedwait (sem_t * sem, const struct timespec * abstime) - /* - * ------------------------------------------------------ - * DOCPUBLIC - * This function waits on a semaphore for at most - * 'abstime'. - * - * PARAMETERS - * sem - * pointer to an instance of sem_t - * - * abstime - * pointer to an instance of struct timespec - * - * DESCRIPTION - * This function waits on a semaphore. If the - * semaphore value is greater than zero, it decreases - * its value by one. If the semaphore value is zero, then - * the calling thread (or process) is blocked until it can - * successfully decrease the value or until interrupted by - * a signal. - * - * If 'abstime' is a NULL pointer then this function will - * block until it can successfully decrease the value or - * until interrupted by a signal. - * - * RESULTS - * 0 successfully decreased semaphore, - * EINVAL 'sem' is not a valid semaphore, - * ENOSYS semaphores are not supported, - * EINTR the function was interrupted by a signal, - * EDEADLK a deadlock condition was detected. - * ETIMEDOUT abstime elapsed before success. - * - * ------------------------------------------------------ - */ -{ - DWORD msecs; - - if (abstime == NULL) - { - msecs = INFINITE; - } - else - { - /* Calculate the number of milliseconds in abstime. */ - msecs = abstime->tv_sec * 1000; - msecs += abstime->tv_nsec / 1000000; - } - - return ((sem == NULL) - ? EINVAL - : pthreadCancelableWait (*sem, msecs) + : pthreadCancelableWait (*sem, INFINITE) ); } /* sem_wait */ diff --git a/tests/ChangeLog b/tests/ChangeLog index 54cccef..c5ac1ce 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +1999-01-17 Ross Johnson <rpj@ise.canberra.edu.au> + + * runtest: New script to build and run a test in the tests directory. + Wed Dec 30 11:22:44 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * tsd1.c: Re-written. See comments at start of file. diff --git a/tests/runtest.bat b/tests/runtest.bat new file mode 100644 index 0000000..fd68008 --- /dev/null +++ b/tests/runtest.bat @@ -0,0 +1,9 @@ +cd tmp +cl /W3 /MT /nologo /Yd /Zi -I..\.. -D_WIN32_WINNT=0x400 -DSTDCALL=_stdcall -c ..\%1.c +cl /Feaout.exe /Zi %1.obj ..\..\pthread.lib +del %1.obj +copy ..\..\pthread.dll . +aout.exe +del aout.exe +del pthread.dll +cd .. |