Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHenrik Gramner <gramner@twoorioles.com>2021-08-12 14:46:27 +0300
committerHenrik Gramner <gramner@twoorioles.com>2021-08-13 17:35:49 +0300
commit8cab97e329add1adb3e1dd1238ac9c417c895e6c (patch)
treeab599267dd30abd648834e56bc7d52acdfcf16f6 /tests
parent878e16693bed5a9e8e6e7c401ccaf9d72e26386b (diff)
checkasm: Properly unregister exception handlers on Windows
Diffstat (limited to 'tests')
-rw-r--r--tests/checkasm/checkasm.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index eeb1d15..97322a2 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -456,25 +456,28 @@ checkasm_context checkasm_context_buf;
* gracefully instead of just aborting abruptly. */
#ifdef _WIN32
static LONG NTAPI signal_handler(EXCEPTION_POINTERS *const e) {
+ const char *err;
switch (e->ExceptionRecord->ExceptionCode) {
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
case EXCEPTION_INT_DIVIDE_BY_ZERO:
- checkasm_fail_func("fatal arithmetic error");
+ err = "fatal arithmetic error";
break;
case EXCEPTION_ILLEGAL_INSTRUCTION:
case EXCEPTION_PRIV_INSTRUCTION:
- checkasm_fail_func("illegal instruction");
+ err = "illegal instruction";
break;
case EXCEPTION_ACCESS_VIOLATION:
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
case EXCEPTION_DATATYPE_MISALIGNMENT:
case EXCEPTION_IN_PAGE_ERROR:
case EXCEPTION_STACK_OVERFLOW:
- checkasm_fail_func("segmentation fault");
+ err = "segmentation fault";
break;
default:
return EXCEPTION_CONTINUE_SEARCH;
}
+ RemoveVectoredExceptionHandler(signal_handler);
+ checkasm_fail_func(err);
checkasm_load_context();
return EXCEPTION_CONTINUE_EXECUTION; /* never reached, but shuts up gcc */
}