summaryrefslogtreecommitdiff
path: root/exit.c
diff options
context:
space:
mode:
authorrpj <rpj>1999-08-22 11:43:40 +0000
committerrpj <rpj>1999-08-22 11:43:40 +0000
commit3f0d4d7d7c5bece6799d966f0de7891c6d242261 (patch)
tree862c101ab9713b0401bb7bc583f8c2216745334d /exit.c
parent5e87a0d9bdd4c2c2ab0e45a6379b4df0f1471ffa (diff)
1999-08-22 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* exit.c (pthread_exit): Fix reference to potentially uninitialised pointer. 1999-08-21 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * private.c (_pthread_threadStart): Apply fix of 1999-08-19 this time to C++ and non-trapped C versions. Ommitted to do this the first time through. tests/ChangeLog: Aug 22 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au> * runall.bat (join2): Add test.
Diffstat (limited to 'exit.c')
-rw-r--r--exit.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/exit.c b/exit.c
index 32468d9..ff0aab3 100644
--- a/exit.c
+++ b/exit.c
@@ -53,6 +53,12 @@ pthread_exit (void *value_ptr)
{
pthread_t self;
+#ifdef _MSC_VER
+
+ DWORD exceptionInformation[3];
+
+#endif
+
/* 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
@@ -61,7 +67,6 @@ pthread_exit (void *value_ptr)
*/
self = (pthread_t) pthread_getspecific (_pthread_selfThreadKey);
- self->exitStatus = value_ptr;
if (self == NULL || self->implicit)
{
@@ -75,46 +80,43 @@ pthread_exit (void *value_ptr)
/* Never reached */
}
- else
- {
+
+ self->exitStatus = value_ptr;
+
#ifdef _MSC_VER
-
- DWORD exceptionInformation[3];
- exceptionInformation[0] = (DWORD) (_PTHREAD_EPS_EXIT);
- exceptionInformation[1] = (DWORD) (value_ptr);
- exceptionInformation[2] = (DWORD) (0);
+ exceptionInformation[0] = (DWORD) (_PTHREAD_EPS_EXIT);
+ exceptionInformation[1] = (DWORD) (value_ptr);
+ exceptionInformation[2] = (DWORD) (0);
- RaiseException (
- EXCEPTION_PTHREAD_SERVICES,
- 0,
- 3,
- exceptionInformation);
+ RaiseException (
+ EXCEPTION_PTHREAD_SERVICES,
+ 0,
+ 3,
+ exceptionInformation);
#else /* ! _MSC_VER */
#ifdef __cplusplus
- throw Pthread_exception_exit();
+ throw Pthread_exception_exit();
#else /* ! __cplusplus */
- (void) pthread_pop_cleanup( 1 );
+ (void) pthread_pop_cleanup( 1 );
- _pthread_callUserDestroyRoutines(self);
+ _pthread_callUserDestroyRoutines(self);
#if ! defined (__MINGW32__) || defined (__MSVCRT__)
- _endthreadex ((unsigned) value_ptr);
+ _endthreadex ((unsigned) value_ptr);
#else
- _endthread ();
+ _endthread ();
#endif
#endif /* __cplusplus */
#endif /* _MSC_VER */
- }
-
/* Never reached. */
}