diff options
| author | rpj <rpj> | 2000-08-14 03:43:09 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2000-08-14 03:43:09 +0000 | 
| commit | 16cb1bf22f72db0ac47080e364ffbc79a3ec174a (patch) | |
| tree | 694bb9faa936d287344b3cf467539f1e0b85ac05 /pthread.h | |
| parent | 8fac2c3753ca6c92cfa30b72431a6da46e48fa7f (diff) | |
2000-08-13  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * errno.c: Add _MD precompile condition; thus far
        had no effect when using /MD compile option but I
        thnk it should be there.
        * exit.c: Add __cplusplus to various #if lines;
        was compiling SEH code even when VC++ had
        C++ compile options.
        * private.c: ditto.
        * create.c (pthread_create): Add PT_STDCALL macro to
        function pointer arg in _beginthread().
        * pthread.h: PT_STDCALL really does need to be defined
        in both this and impliment.h; don't set it to __cdecl
        - this macro is only used to extend function pointer
        casting for functions that will be passed as parameters.
        (~PThreadCleanup): add cast and group expression.
        (_errno): Add _MD compile conditional.
        (PtW32NoCatchWarn): Change pragma message.
        * implement.h: Move and change PT_STDCALL define.
        * need_errno.h: Add _MD to compilation conditional.
        * GNUmakefile: Substantial rewrite for new naming
        convention; set for nil optimisation (turn it up
        when we have a working library build; add target
        "fake.a" to build a libpthreadw32.a from the VC++
        built DLL pthreadVCE.dll.
        * pthread.def (LIBRARY): Don't specify in the .def
        file - it is specified on the linker command line
        since we now use the same .def file for variously
        named .dlls.
        * Makefile: Substantial rewrite for new naming
        convention; default nmake target only issues a
        help message; run nmake with specific target
        corresponding to the EH scheme being used.
        * README: Update information; add naming convention
        explanation.
        * ANNOUNCE: Update information.
2000-08-12  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * pthread.h: Add compile-time message when using
        MSC_VER compiler and C++ EH to warn application
        programmers to use PtW32Catch instead of catch(...)
        if they want cancelation and pthread_exit to work.
        * implement.h: Remove #include <semaphore.h>; we
        use our own local semaphore.h.
tests/ChangeLog:
2000-08-13  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * condvar3.c: Minor change to eliminate compiler
        warning.
        * condvar4.c: ditto.
        * condvar5.c: ditto.
        * condvar6.c: ditto.
        * condvar7.c: ditto.
        * condvar8.c: ditto.
        * condvar9.c: ditto.
        * exit1.c: Function needed return statement.
        * cleanup1.c: Remove unnecessary printf arg.
        * cleanup2.c: Fix cast.
        * rwlock6.c: Fix casts.
        * exception1.c (PtW32CatchAll): Had the wrong name;
        fix casts.
        * cancel3.c: Remove unused waitLock variable.
        * GNUmakefile: Change library/dll naming; add new tests;
        general minor changes.
        * Makefile: Change library/dll naming; add targets for
        testing each of the two VC++ EH scheme versions;
        default target now issues help message; compile warnings
        now interpreted as errors to stop the make; add new
        tests; restructure to remove prerequisites needed
        otherwise.
        * README: Updated.
Diffstat (limited to 'pthread.h')
| -rw-r--r-- | pthread.h | 37 | 
1 files changed, 21 insertions, 16 deletions
| @@ -267,6 +267,16 @@ struct timespec {  #define ETIMEDOUT 10060     /* This is the value in winsock.h. */  #endif +#ifdef __MINGW32__ +#define PT_STDCALL +#else +#ifdef __cplusplus +#define PT_STDCALL __stdcall +#else +#define PT_STDCALL __stdcall +#endif +#endif +  #ifdef _MSC_VER  /*   * Re-enable all but 4127, 4514 @@ -279,16 +289,6 @@ struct timespec {  #define FALSE	0  #endif /* !TRUE */ -#ifdef __MINGW32__ -#define PT_STDCALL -#else -#ifdef __cplusplus -#define PT_STDCALL __cdecl -#else -#define PT_STDCALL __stdcall -#endif -#endif -  #ifdef __cplusplus  extern "C"  { @@ -655,7 +655,7 @@ struct _pthread_cleanup_t  	   *      of how the code exits the scope  	   *      (i.e. such as by an exception)  	   */ -	  void            (*cleanUpRout)( void * ); +	  void            (PT_STDCALL *cleanUpRout)( void * );  	  void    *       obj;  	  int             executeIt; @@ -671,7 +671,7 @@ struct _pthread_cleanup_t  	    }  	  PThreadCleanup( -			 void            (*routine)( void * ), +			 void            (PT_STDCALL *routine)( void * ),  			 void    *       arg ) :  	    cleanUpRout( routine ),  	    obj( arg ), @@ -684,9 +684,9 @@ struct _pthread_cleanup_t  	  ~PThreadCleanup()  	    { -	      if ( executeIt && cleanUpRout != NULL ) +	      if ( executeIt && ((void *) cleanUpRout != NULL) )  		{ -		  (*cleanUpRout)( obj ); +          (void) (*cleanUpRout)( obj );  		}  	    } @@ -928,7 +928,7 @@ int pthreadCancelableTimedWait (HANDLE waitHandle, DWORD timeout);  /*   * Thread-Safe C Runtime Library Mappings.   */ -#if (! defined(NEED_ERRNO)) || (! defined( _REENTRANT ) && ! defined( _MT )) +#if (! defined(NEED_ERRNO)) || (! defined( _REENTRANT ) && (! defined( _MT ) || ! defined( _MD )))  int * _errno( void );  #endif @@ -1002,9 +1002,14 @@ class Pthread_exception_exit   : public Pthread_exception {};           * WARNING: Replace any 'catch( ... )' with 'PtW32CatchAll'           * if you want Pthread-Win32 cancelation and pthread_exit to work.           */ +#ifndef PtW32NoCatchWarn +#pragma message("When compiling applications with MSVC++ and C++ exception handling:") +#pragma message("  Replace any 'catch( ... )' with 'PtW32CatchAll' in POSIX threads") +#pragma message("  if you want POSIX thread cancelation and pthread_exit to work.") +#endif  #define PtW32CatchAll \          catch( Pthread_exception & ) { throw; } \ -        catch( ... )       +        catch( ... )  #else  #define catch( E ) \          catch( Pthread_exception & ) { throw; } \ | 
