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 .. | 
