From 16cb1bf22f72db0ac47080e364ffbc79a3ec174a Mon Sep 17 00:00:00 2001 From: rpj Date: Mon, 14 Aug 2000 03:43:09 +0000 Subject: 2000-08-13 Ross Johnson * 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 * 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 ; we use our own local semaphore.h. tests/ChangeLog: 2000-08-13 Ross Johnson * 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. --- pthread.h | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'pthread.h') diff --git a/pthread.h b/pthread.h index 167adff..ddfd601 100644 --- a/pthread.h +++ b/pthread.h @@ -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; } \ -- cgit v1.2.3