[release/8.0] Properly handle debugger-enumerating interior pointers and enregistered...
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Thu, 21 Sep 2023 09:25:17 +0000 (02:25 -0700)
committerGitHub <noreply@github.com>
Thu, 21 Sep 2023 09:25:17 +0000 (02:25 -0700)
* Fix issue with enregistered values

* Fix assert and enregistered ref reporting

* Fix issue from merge

---------

Co-authored-by: Lee Culver <leculver@microsoft.com>
Co-authored-by: Juan Sebastian Hoyos Ayala <juan.hoyos@microsoft.com>
Co-authored-by: Juan Hoyos <19413848+hoyosjs@users.noreply.github.com>
src/coreclr/debug/daccess/dacdbiimpl.cpp
src/coreclr/debug/di/rsclass.cpp

index 67d5b1e..0720800 100644 (file)
@@ -7788,8 +7788,9 @@ HRESULT DacStackReferenceWalker::Next(ULONG count, DacGcReference stackRefs[], U
         stackRefs[i].i64ExtraData = 0;
 
         const SOSStackRefData &sosStackRef = mList.Get(i);
-        if (sosStackRef.Flags & GC_CALL_INTERIOR)
+        if (sosStackRef.Flags & GC_CALL_INTERIOR || sosStackRef.Address == 0)
         {
+            // Direct pointer case - interior pointer, Frame ref, or enregistered var.
             stackRefs[i].pObject = CLRDATA_ADDRESS_TO_TADDR(sosStackRef.Object) | 1;
         }
         else
index ec52823..55f83b4 100644 (file)
@@ -132,6 +132,7 @@ HRESULT CordbClass::GetStaticFieldValue(mdFieldDef fieldDef,
     IMetaDataImport * pImport = NULL;
     EX_TRY
     {
+        RSLockHolder lockHolder(GetProcess()->GetProcessLock());
         pImport = GetModule()->GetMetaDataImporter(); // throws
 
         // Validate the token.
@@ -1191,4 +1192,3 @@ HRESULT CordbClass::SearchFieldInfo(
     // Well, the field doesn't even belong to this class...
     ThrowHR(E_INVALIDARG);
 }
-