From f92b4771baf8faccc197ae06922690d1cef74dad Mon Sep 17 00:00:00 2001 From: rpj Date: Thu, 12 Aug 1999 00:53:52 +0000 Subject: 1999-08-12 Ross Johnson * exit.c (pthread_exit): Check for implicitly created threads to avoid raising an unhandled exception. 1999-07-12 Ross Johnson * condvar.c (pthread_cond_destroy): Add critical section. (cond_timedwait): Add critical section; check for timeout waiting on semaphore. (pthread_cond_broadcast): Add critical section. - Peter Slacik 1999-07-09 Ross Johnson The following changes fix a bug identified by Lorin Hochstein and solved by John Bossom . The problem was that cleanup handlers were not executed when pthread_exit() was called. * implement.h (pthread_t_): Add exceptionInformation element for C++ per-thread exception information. (general): Define and rename exceptions. * misc.c (CancelableWait): _PTHREAD_EPS_CANCEL (SEH) and Pthread_exception_cancel (C++) used to identify the exception. * cancel.c (pthread_testcancel): _PTHREAD_EPS_CANCEL (SEH) and Pthread_exception_cancel (C++) used to identify the exception. * exit.c (pthread_exit): throw/raise an exception to return to _pthread_threadStart() to exit the thread. _PTHREAD_EPS_EXIT (SEH) and Pthread_exception_exit (C++) used to identify the exception. * private.c (_pthread_threadStart): Add pthread_exit exception trap; clean up and exit the thread directly rather than via pthread_exit(). --- cancel.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'cancel.c') diff --git a/cancel.c b/cancel.c index dac8e66..c3711e2 100644 --- a/cancel.c +++ b/cancel.c @@ -195,7 +195,7 @@ pthread_testcancel (void) DWORD exceptionInformation[3]; - exceptionInformation[0] = (DWORD) (0); + exceptionInformation[0] = (DWORD) (_PTHREAD_EPS_CANCEL); exceptionInformation[1] = (DWORD) (0); exceptionInformation[2] = (DWORD) (0); @@ -209,7 +209,7 @@ pthread_testcancel (void) #ifdef __cplusplus - throw Pthread_exception(); + throw Pthread_exception_cancel(); #endif /* __cplusplus */ -- cgit v1.2.3