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; } \ |