diff options
Diffstat (limited to 'exit.c')
-rw-r--r-- | exit.c | 60 |
1 files changed, 1 insertions, 59 deletions
@@ -41,62 +41,4 @@ # include <process.h> #endif -void -pthread_exit (void *value_ptr) - /* - * ------------------------------------------------------ - * DOCPUBLIC - * This function terminates the calling thread, returning - * the value 'value_ptr' to any joining thread. - * - * PARAMETERS - * value_ptr - * a generic data value (i.e. not the address of a value) - * - * - * DESCRIPTION - * This function terminates the calling thread, returning - * the value 'value_ptr' to any joining thread. - * NOTE: thread should be joinable. - * - * RESULTS - * N/A - * - * ------------------------------------------------------ - */ -{ - pthread_t self; - - /* If the current thread is implicit it was not started through - pthread_create(), therefore we cleanup and end the thread - here. Otherwise we raise an exception to unwind the exception - stack. The exception will be caught by ptw32_threadStart(), - which will cleanup and end the thread for us. - */ - - self = (pthread_t) pthread_getspecific (ptw32_selfThreadKey); -#ifdef _UWIN - if(--pthread_count <= 0) - exit((int)value_ptr); -#endif - - if (self == NULL || self->implicit) - { - ptw32_callUserDestroyRoutines(self); - -#if ! defined (__MINGW32__) || defined (__MSVCRT__) - _endthreadex ((unsigned) value_ptr); -#else - _endthread (); -#endif - - /* Never reached */ - } - - self->exitStatus = value_ptr; - - ptw32_throw(PTW32_EPS_EXIT); - - /* Never reached. */ - -} +#include "pthread_exit.c" |