summaryrefslogtreecommitdiff
path: root/src/vm/exceptionhandling.h
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2017-02-25 11:08:35 +0100
committerGitHub <noreply@github.com>2017-02-25 11:08:35 +0100
commitf24ec95e0db5dcae011b394faf8c858c18d1bd65 (patch)
tree613e5edcbf18afb2eb244e4e060ea355948dd80d /src/vm/exceptionhandling.h
parentb5b8b1096171ffecfa0a7c1e643cae6cabd16a23 (diff)
downloadcoreclr-f24ec95e0db5dcae011b394faf8c858c18d1bd65.tar.gz
coreclr-f24ec95e0db5dcae011b394faf8c858c18d1bd65.tar.bz2
coreclr-f24ec95e0db5dcae011b394faf8c858c18d1bd65.zip
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.
Diffstat (limited to 'src/vm/exceptionhandling.h')
-rw-r--r--src/vm/exceptionhandling.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/vm/exceptionhandling.h b/src/vm/exceptionhandling.h
index 4dba095ff5..6bf58d1bd0 100644
--- a/src/vm/exceptionhandling.h
+++ b/src/vm/exceptionhandling.h
@@ -653,6 +653,11 @@ public:
{
return !m_ExceptionFlags.UnwindHasStarted();
}
+
+ EHClauseInfo* GetEHClauseInfo()
+ {
+ return &m_EHClauseInfo;
+ }
private: ;