Fix GC hole when exception filter throws unhandled exception (#9785)
authorJan Vorlicek <janvorli@microsoft.com>
Sat, 25 Feb 2017 10:08:35 +0000 (11:08 +0100)
committerGitHub <noreply@github.com>
Sat, 25 Feb 2017 10:08:35 +0000 (11:08 +0100)
commitf24ec95e0db5dcae011b394faf8c858c18d1bd65
tree613e5edcbf18afb2eb244e4e060ea355948dd80d
parentb5b8b1096171ffecfa0a7c1e643cae6cabd16a23
Fix GC hole when exception filter throws unhandled exception (#9785)

The extra Unix specific piece of code in the StackFrameIterator::Filter that
handles the difference in the exception stack unwinding on Unix was not
skipping exception trackers belonging to filter clauses. But that was not
right, since filter funclet stack frames behave the same way on Windows and
Unix. They can be present on the stack when we reach their parent frame if
the filter hasn't finished running yet or they can be gone if the filter
completed running, either succesfully or with unhandled exception.

This change adds skipping of filter funclet related exception trackers at
that place so that the common code processes them.

This fixes the GC hole mentioned in the title that was discovered when
running some tests with GCStress mode 2.
src/vm/exceptionhandling.h
src/vm/stackwalk.cpp