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) */ | 
