summaryrefslogtreecommitdiff
path: root/pthread.h
diff options
context:
space:
mode:
authorrpj <rpj>2000-08-14 03:43:09 +0000
committerrpj <rpj>2000-08-14 03:43:09 +0000
commit16cb1bf22f72db0ac47080e364ffbc79a3ec174a (patch)
tree694bb9faa936d287344b3cf467539f1e0b85ac05 /pthread.h
parent8fac2c3753ca6c92cfa30b72431a6da46e48fa7f (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.h37
1 files changed, 21 insertions, 16 deletions
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; } \