diff options
author | rpj <rpj> | 2000-12-29 07:08:44 +0000 |
---|---|---|
committer | rpj <rpj> | 2000-12-29 07:08:44 +0000 |
commit | 0c2cb3fb140fb0d12586587001cb1ca238cf8c25 (patch) | |
tree | 72caf359f0e3d2aea2c833c8061b65f971f91381 /tests/exception3.c | |
parent | bab1896412f2d292ebd8d44bc9d6ddb58a8702b0 (diff) |
./ChangeLog:
2000-12-29 Ross Johnson <rpj@special.ise.canberra.edu.au>
* Makefile: Back-out "for" loops which don't work.
* GNUmakefile: Remove the fake.a target; add the "realclean"
target; don't remove built libs under the "clean" target.
* config.h: Add a guard against multiple inclusion.
* semaphore.h: Add some defines from config.h to make
semaphore.h independent of config.h when building apps.
* pthread.h (_errno): Back-out previous fix until we know how to
fix it properly.
* implement.h (lockCount): Add missing element to pthread_mutex_t_.
* sync.c (pthread_join): Spelling fix in comment.
* private.c (ptw32_threadStart): Reset original termination
function (C++).
(ptw32_threadStart): Cleanup detached threads early in case
the library is statically linked.
(ptw32_callUserDestroyRoutines): Remove [SEH] __try block from
destructor call so that unhandled exceptions will be passed through
to the system; call terminate() from [C++] try block for the same
reason.
* tsd.c (pthread_getspecific): Add comment.
* mutex.c (pthread_mutex_init): Initialise new elements in
pthread_mutex_t.
(pthread_mutex_unlock): Invert "pthread_equal()" test.
2000-12-28 Ross Johnson <rpj@special.ise.canberra.edu.au>
* semaphore.c (mode_t): Use ifndef HAVE_MODE_T to include definition.
* config.h.in (HAVE_MODE_T): Added.
(_UWIN): Start adding defines for the UWIN package.
./tests/ChangeLog:
2000-12-29 Ross Johnson <rpj@special.ise.canberra.edu.au>
* GNUmakefile: Add mutex4 test; ensure libpthreadw32.a is
removed for "clean" target.
* Makefile: Add mutex4 test.
* exception3.c: Remove SEH code; automatically pass the test
under SEH (which is an N/A environment).
* mutex4.c: New test.
* eyal1.c (do_work_unit): Add a dummy "if" to force the
optimiser to retain code; reduce thread work loads.
* condvar8.c (main): Add an additional "assert" for debugging;
increase pthread_cond_signal timeout.
Diffstat (limited to 'tests/exception3.c')
-rw-r--r-- | tests/exception3.c | 72 |
1 files changed, 15 insertions, 57 deletions
diff --git a/tests/exception3.c b/tests/exception3.c index b820b4b..66f4173 100644 --- a/tests/exception3.c +++ b/tests/exception3.c @@ -39,17 +39,16 @@ * - Process returns non-zero exit status. */ +#include "test.h" + +#if defined(__cplusplus) -#if defined(_MSC_VER) && defined(__cplusplus) +#if defined(_MSC_VER) #include <eh.h> #else #include <new.h> #endif -#if defined(_MSC_VER) || defined(__cplusplus) - -#include "test.h" - /* * Create NUMTHREADS threads in addition to the Main thread. */ @@ -60,28 +59,12 @@ enum { int caught = 0; pthread_mutex_t caughtLock = PTHREAD_MUTEX_INITIALIZER; -#if defined(_MSC_VER) && !defined(__cplusplus) - -LONG unhandledExceptionFilter (EXCEPTION_POINTERS *ep) -{ - if (ep->ExceptionRecord->ExceptionCode == 0x1) - { - pthread_mutex_lock(&caughtLock); - caught++; - pthread_mutex_unlock(&caughtLock); - } - - return EXCEPTION_CONTINUE_EXECUTION; -} - -#elif defined(__cplusplus) - void terminateFunction () { pthread_mutex_lock(&caughtLock); caught++; -#if 1 +#if 0 { FILE * fp = fopen("pthread.log", "a"); fprintf(fp, "Caught = %d\n", caught); @@ -92,28 +75,15 @@ terminateFunction () pthread_exit((void *) 0); } -#endif - void * exceptionedThread(void * arg) { int dummy = 0x1; - { -#if defined(_MSC_VER) && !defined(__cplusplus) + (void) set_terminate(&terminateFunction); + throw dummy; - RaiseException(dummy, 0, 0, NULL); - -#elif defined(__cplusplus) - - (void) set_terminate(&terminateFunction); - - throw dummy; - -#endif - } - - return (void *) 100; + return (void *) 0; } int @@ -125,25 +95,13 @@ main() assert((mt = pthread_self()) != NULL); - { -#if defined(_MSC_VER) && !defined(__cplusplus) - LPTOP_LEVEL_EXCEPTION_FILTER oldHandler; - oldHandler = SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER) unhandledExceptionFilter); -#endif - - for (i = 0; i < NUMTHREADS; i++) - { - assert(pthread_create(&et[i], NULL, exceptionedThread, NULL) == 0); - } - -#if defined(_MSC_VER) && !defined(__cplusplus) - (void) SetUnhandledExceptionFilter(oldHandler); -#endif + for (i = 0; i < NUMTHREADS; i++) + { + assert(pthread_create(&et[i], NULL, exceptionedThread, NULL) == 0); + } - Sleep(30000); - } + Sleep(10000); - printf("Caught = %d\n", caught); assert(caught == NUMTHREADS); /* @@ -152,7 +110,7 @@ main() return 0; } -#else /* defined(_MSC_VER) || defined(__cplusplus) */ +#else /* defined(__cplusplus) */ int main() @@ -161,4 +119,4 @@ main() return 0; } -#endif /* defined(_MSC_VER) || defined(__cplusplus) */ +#endif /* defined(__cplusplus) */ |