From 423d2a3b91feea18ab361da04d5cc24bdff157d0 Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Thu, 14 Feb 2019 17:07:14 -0800 Subject: Replace multi-loaderallocator hash implementation in MethodDescBackpatchInfo (#22285) * GCHeapHash - Hashtable implementation for runtime use - Implementation written in C++ - Data storage in managed heap memory - Based on SHash design, but using managed memory CrossLoaderAllocatorHash - Hash for c++ Pointer to C++ pointer where the lifetimes are controlled by different loader allocators - Support for add/remove/visit all entries of 1 key/visit all entries/ remove all entries of 1 key - Supports holding data which is unmanaged, but data items themselves can be of any size (key/value are templated types) * Swap MethodDescBackpatchInfo to use the CrossLoaderAllocatorHash * The MethodDescBackpatchCrst needs to be around an allocation - Adjust the Crst so that it can safely be used around code which allocates - Required moving its use out from within the EESuspend logic used in rejit --- src/vm/prestub.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/vm/prestub.cpp') diff --git a/src/vm/prestub.cpp b/src/vm/prestub.cpp index d04a5d0a54..a08a2d1a10 100644 --- a/src/vm/prestub.cpp +++ b/src/vm/prestub.cpp @@ -1964,6 +1964,8 @@ PCODE MethodDesc::DoPrestub(MethodTable *pDispatchingMT) return pCode; } + _ASSERTE(!MayHaveEntryPointSlotsToBackpatch()); // This path doesn't lock the MethodDescBackpatchTracker as it should only + // happen for jump-stampable or non-versionable methods SetCodeEntryPoint(pCode); } else -- cgit v1.2.3