summaryrefslogtreecommitdiff
path: root/src/vm/exceptionhandling.h
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2015-08-26 12:34:25 +0200
committerJan Vorlicek <janvorli@microsoft.com>2015-08-26 13:20:11 +0200
commite48ec9c8c5c3edb1b32251d57d766999da973d94 (patch)
treee7a3af8db585d461fd6c34b7a8e1a56e1c67c41e /src/vm/exceptionhandling.h
parent6f3131364edfe08c6c697a5b65279991e14e4d16 (diff)
downloadcoreclr-e48ec9c8c5c3edb1b32251d57d766999da973d94.tar.gz
coreclr-e48ec9c8c5c3edb1b32251d57d766999da973d94.tar.bz2
coreclr-e48ec9c8c5c3edb1b32251d57d766999da973d94.zip
Fix corner case of GC stack walking during exception handling
This change fixes a corner case of GC stack walking during exception handling that I have missed in my previous fix. When GC suspends a thread while it is performing second pass of exception handling, in some cases the previous exception tracker is already collapsed into the current one and so the evidence on a frame being a parent of an already executed handler funclet cannot be extracted from previous trackers and stack walker tries to pass an outdated reference to GC. Fortunatelly, the information about the parent from the collapsed tracker is stored in the tracker into which the collapsed one was merged and so we can test it using that.
Diffstat (limited to 'src/vm/exceptionhandling.h')
-rw-r--r--src/vm/exceptionhandling.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/vm/exceptionhandling.h b/src/vm/exceptionhandling.h
index 0f9e962ffe..c7f44b4b41 100644
--- a/src/vm/exceptionhandling.h
+++ b/src/vm/exceptionhandling.h
@@ -552,6 +552,13 @@ public:
return m_sfCallerOfActualHandlerFrame;
}
+ StackFrame GetCallerOfCollapsedActualHandlingFrame()
+ {
+ LIMITED_METHOD_CONTRACT;
+
+ return m_EnclosingClauseInfoOfCollapsedTracker.GetEnclosingClauseCallerSP();
+ }
+
#ifndef FEATURE_PAL
private:
EHWatsonBucketTracker m_WatsonBucketTracker;