Do not handle the thread context for garbage collection events
authorAndrew Au <andrewau@microsoft.com>
Wed, 11 Jul 2018 00:20:42 +0000 (17:20 -0700)
committerAndrew Au <cshung@gmail.com>
Wed, 7 Nov 2018 02:34:47 +0000 (18:34 -0800)
src/debug/di/process.cpp
src/debug/di/rspriv.h

index 8fcd994..e668fe6 100644 (file)
@@ -984,8 +984,7 @@ CordbProcess::CordbProcess(ULONG64 clrInstanceId,
     m_pEventChannel(NULL),
     m_fAssertOnTargetInconsistency(false),
     m_runtimeOffsetsInitialized(false),
-    m_writableMetadataUpdateMode(LegacyCompatPolicy),
-    m_isBlockedOnGarbageCollectionEvent(false)
+    m_writableMetadataUpdateMode(LegacyCompatPolicy)
 {
     _ASSERTE((m_id == 0) == (pShim == NULL));
 
@@ -3645,8 +3644,6 @@ HRESULT CordbProcess::Continue(BOOL fIsOutOfBand)
 {
     PUBLIC_API_ENTRY(this);
 
-    this->m_isBlockedOnGarbageCollectionEvent = false;
-
     if (m_pShim == NULL) // This API is moved off to the shim
     {
         // bias towards failing with CORDBG_E_NUETERED.
@@ -4914,7 +4911,6 @@ void CordbProcess::RawDispatchEvent(
     case DB_IPCE_BEFORE_GARBAGE_COLLECTION:
         {
             {
-                this->m_isBlockedOnGarbageCollectionEvent = true;
                 PUBLIC_CALLBACK_IN_THIS_SCOPE(this, pLockHolder, pEvent);
                 pCallback4->BeforeGarbageCollection(static_cast<ICorDebugProcess*>(this));
             }
@@ -4924,7 +4920,6 @@ void CordbProcess::RawDispatchEvent(
     case DB_IPCE_AFTER_GARBAGE_COLLECTION:
         {
             {
-                this->m_isBlockedOnGarbageCollectionEvent = true;
                 PUBLIC_CALLBACK_IN_THIS_SCOPE(this, pLockHolder, pEvent);
                 pCallback4->AfterGarbageCollection(static_cast<ICorDebugProcess*>(this));
             }
@@ -6509,17 +6504,10 @@ HRESULT CordbProcess::GetThreadContext(DWORD threadID, ULONG32 contextSize, BYTE
                 hr = E_INVALIDARG;
             }
             else
-            {
-                if (this->m_isBlockedOnGarbageCollectionEvent)
-                {
-                    hr = this->GetDataTarget()->GetThreadContext(threadID, CONTEXT_FULL, contextSize, context);
-                }
-                else
-                {
-                    DT_CONTEXT* managedContext;
-                    hr = thread->GetManagedContext(&managedContext);
-                    *pContext = *managedContext;
-                }
+            {                
+                DT_CONTEXT* managedContext;
+                hr = thread->GetManagedContext(&managedContext);
+                *pContext = *managedContext;
             }
         }
         EX_CATCH
@@ -6611,14 +6599,7 @@ HRESULT CordbProcess::SetThreadContext(DWORD threadID, ULONG32 contextSize, BYTE
                 hr = E_INVALIDARG;
             }
 
-            if (this->m_isBlockedOnGarbageCollectionEvent)
-            {
-                hr = this->m_pMutableDataTarget->SetThreadContext(threadID, contextSize, context);
-            }
-            else
-            {
-                hr = thread->SetManagedContext(pContext);
-            }
+            hr = thread->SetManagedContext(pContext);
         }
         EX_CATCH
         {
index d3de665..86df87a 100644 (file)
@@ -4113,9 +4113,6 @@ private:
 
     // controls how metadata updated in the target is handled
     WriteableMetadataUpdateMode m_writableMetadataUpdateMode;
-
-    // TODO: Comments
-    bool                  m_isBlockedOnGarbageCollectionEvent;
 };
 
 // Some IMDArocess APIs are supported as interop-only.