diff options
| -rw-r--r-- | ChangeLog | 14 | ||||
| -rw-r--r-- | dll.c | 4 | ||||
| -rw-r--r-- | implement.h | 6 | ||||
| -rw-r--r-- | pthread.h | 8 | ||||
| -rw-r--r-- | sched.h | 10 | ||||
| -rw-r--r-- | sem_timedwait.c | 22 | ||||
| -rw-r--r-- | semaphore.h | 11 | 
7 files changed, 54 insertions, 21 deletions
| @@ -1,3 +1,17 @@ +2005-04-01  Kevin Lussier <Kevin at codegreennetworks.com> + +	* sem_timedwait.c (sem_timedwait): Increase size of temp variables to +	avoid int overflows for large timeout values. +	* implement.h (int64_t): Include or define. + +2005-03-31   Dimitar Panayotov <develop at mail.bg>^M + +	* pthread.h: Fix conditional defines for static linking. +	* sched.h: Liekwise. +	* semaphore.h: Likewise. +	* dll.c (PTW32_STATIC_LIB): Module is conditionally included +	in the build. +  2005-03-16  Ross Johnson  <ross at callisto.canberra.edu.au>^M          * pthread_setcancelstate.c: Undo the last change. @@ -34,6 +34,8 @@   *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA   */ +#ifndef PTW32_STATIC_LIB +  #include "pthread.h"  #include "implement.h" @@ -86,3 +88,5 @@ DllMain (HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)    return (result);  }				/* DllMain */ + +#endif /* PTW32_STATIC_LIB */ diff --git a/implement.h b/implement.h index abba13c..d2aee1b 100644 --- a/implement.h +++ b/implement.h @@ -90,6 +90,12 @@ typedef VOID (APIENTRY *PAPCFUNC)(DWORD dwParam);  #define PTW32_INTERLOCKED_LPLONG PVOID*  #endif +#if defined(__MINGW32__) +#include <stdint.h> +#else +#define int64_t _int64 +#endif +  typedef enum  {    /* @@ -37,8 +37,8 @@   * See the README file for an explanation of the pthreads-win32 version   * numbering scheme and how the DLL is named etc.   */ -#define PTW32_VERSION 2,1,0,0 -#define PTW32_VERSION_STRING "2, 1, 0, 0\0" +#define PTW32_VERSION 2,2,0,0 +#define PTW32_VERSION_STRING "2, 2, 0, 0\0"  /* There are three implementations of cancel cleanup.   * Note that pthread.h is included in both application @@ -556,12 +556,14 @@ extern "C"   * do NOT define PTW32_BUILD, and then the variables/functions will   * be imported correctly.   */ -#ifdef _DLL +#ifndef PTW32_STATIC_LIB  #  ifdef PTW32_BUILD  #    define PTW32_DLLPORT __declspec (dllexport)  #  else  #    define PTW32_DLLPORT __declspec (dllimport)  #  endif +#else +#  define PTW32_DLLPORT  #endif  /* @@ -76,10 +76,14 @@   * do NOT define PTW32_BUILD, and then the variables/functions will   * be imported correctly.   */ -#ifdef PTW32_BUILD -# define PTW32_DLLPORT __declspec (dllexport) +#ifndef PTW32_STATIC_LIB +#  ifdef PTW32_BUILD +#    define PTW32_DLLPORT __declspec (dllexport) +#  else +#    define PTW32_DLLPORT __declspec (dllimport) +#  endif  #else -# define PTW32_DLLPORT __declspec (dllimport) +#  define PTW32_DLLPORT  #endif  /* diff --git a/sem_timedwait.c b/sem_timedwait.c index 6bf94d4..7fba45f 100644 --- a/sem_timedwait.c +++ b/sem_timedwait.c @@ -121,11 +121,11 @@ sem_timedwait (sem_t * sem, const struct timespec *abstime)  #endif /* NEED_FTIME */ -  const DWORD NANOSEC_PER_MILLISEC = 1000000; -  const DWORD MILLISEC_PER_SEC = 1000; +  const int64_t NANOSEC_PER_MILLISEC = 1000000; +  const int64_t MILLISEC_PER_SEC = 1000;    DWORD milliseconds; -  DWORD tmpAbsMilliseconds; -  DWORD tmpCurrMilliseconds; +  int64_t tmpAbsMilliseconds; +  int64_t tmpCurrMilliseconds;    if (sem == NULL)      { @@ -150,8 +150,8 @@ sem_timedwait (sem_t * sem, const struct timespec *abstime)  	   *  	   * Assume all integers are unsigned, i.e. cannot test if less than 0.  	   */ -	  tmpAbsMilliseconds =  abstime->tv_sec * MILLISEC_PER_SEC; -	  tmpAbsMilliseconds += (abstime->tv_nsec + (NANOSEC_PER_MILLISEC/2)) / NANOSEC_PER_MILLISEC; +	  tmpAbsMilliseconds =  (int64_t)abstime->tv_sec * MILLISEC_PER_SEC; +	  tmpAbsMilliseconds += ((int64_t)abstime->tv_nsec + (NANOSEC_PER_MILLISEC/2)) / NANOSEC_PER_MILLISEC;  	  /* get current system time */ @@ -171,21 +171,21 @@ sem_timedwait (sem_t * sem, const struct timespec *abstime)  	    ptw32_filetime_to_timespec(&ft, &currSysTime);  	  } -	  tmpCurrMilliseconds = currSysTime.tv_sec * MILLISEC_PER_SEC; -	  tmpCurrMilliseconds += (currSysTime.tv_nsec + (NANOSEC_PER_MILLISEC/2)) / NANOSEC_PER_MILLISEC; +	  tmpCurrMilliseconds = (int64_t)currSysTime.tv_sec * MILLISEC_PER_SEC; +	  tmpCurrMilliseconds += ((int64_t)currSysTime.tv_nsec + (NANOSEC_PER_MILLISEC/2)) / NANOSEC_PER_MILLISEC;  #else /* ! NEED_FTIME */  	  _ftime(&currSysTime); -	  tmpCurrMilliseconds = (DWORD) currSysTime.time * MILLISEC_PER_SEC; -	  tmpCurrMilliseconds += (DWORD) currSysTime.millitm; +	  tmpCurrMilliseconds = (int64_t) currSysTime.time * MILLISEC_PER_SEC; +	  tmpCurrMilliseconds += (int64_t) currSysTime.millitm;  #endif /* NEED_FTIME */  	  if (tmpAbsMilliseconds > tmpCurrMilliseconds)  	    { -	      milliseconds = tmpAbsMilliseconds - tmpCurrMilliseconds; +	      milliseconds = (DWORD) (tmpAbsMilliseconds - tmpCurrMilliseconds);  	      if (milliseconds == INFINITE)  		{  		  /* Timeouts must be finite */ diff --git a/semaphore.h b/semaphore.h index 7e71089..a3330a6 100644 --- a/semaphore.h +++ b/semaphore.h @@ -75,13 +75,16 @@   * do NOT define PTW32_BUILD, and then the variables/functions will   * be imported correctly.   */ -#ifdef PTW32_BUILD -# define PTW32_DLLPORT __declspec (dllexport) +#ifndef PTW32_STATIC_LIB +#  ifdef PTW32_BUILD +#    define PTW32_DLLPORT __declspec (dllexport) +#  else +#    define PTW32_DLLPORT __declspec (dllimport) +#  endif  #else -# define PTW32_DLLPORT __declspec (dllimport) +#  define PTW32_DLLPORT  #endif -  /*   * This is a duplicate of what is in the autoconf config.h,   * which is only used when building the pthread-win32 libraries. | 
