Fix GC hole when exception filter throws unhandled exception (dotnet/coreclr#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)
commit9d8abf5414dbcc53e03feac51a32abd9319b9f63
treefae4e53a04fb0eb875ff9d1f1b820f75e41060a6
parent6b22798888d98b1c377650399d2f8773afdbf7ca
Fix GC hole when exception filter throws unhandled exception (dotnet/coreclr#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.

Commit migrated from https://github.com/dotnet/coreclr/commit/f24ec95e0db5dcae011b394faf8c858c18d1bd65
src/coreclr/src/vm/exceptionhandling.h
src/coreclr/src/vm/stackwalk.cpp