diff options
author | Sean Gillespie <sean@swgillespie.me> | 2017-01-23 16:50:51 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-23 16:50:51 -0800 |
commit | ace6d1b728f4041d351cbf05e9356a23305be182 (patch) | |
tree | ac095ca5c008b46907d7b777f553518f2e4952db /src/vm | |
parent | 8305136b93cc017343c028b60ab0aae98825d59f (diff) | |
download | coreclr-ace6d1b728f4041d351cbf05e9356a23305be182.tar.gz coreclr-ace6d1b728f4041d351cbf05e9356a23305be182.tar.bz2 coreclr-ace6d1b728f4041d351cbf05e9356a23305be182.zip |
[Local GC] Add three finalization-related operations to GCToEEInterface (#9029)
* Add three finalization-related operations to GCToEEInterface and utilize them from the GC
* Code review feedback
* Code review feedback
* Fix standalone GC build break
* Repair the standalone GC build
Diffstat (limited to 'src/vm')
-rw-r--r-- | src/vm/crst.h | 1 | ||||
-rw-r--r-- | src/vm/finalizerthread.cpp | 7 | ||||
-rw-r--r-- | src/vm/gcenv.ee.cpp | 8 | ||||
-rw-r--r-- | src/vm/gcenv.ee.h | 2 | ||||
-rw-r--r-- | src/vm/vars.cpp | 1 | ||||
-rw-r--r-- | src/vm/vars.hpp | 1 |
6 files changed, 14 insertions, 6 deletions
diff --git a/src/vm/crst.h b/src/vm/crst.h index 7b470982d5..c68f40679c 100644 --- a/src/vm/crst.h +++ b/src/vm/crst.h @@ -105,7 +105,6 @@ extern DWORD g_fEEShutDown; // Total count of Crst lock of the type (Shutdown) that are currently in use extern Volatile<LONG> g_ShutdownCrstUsageCount; extern Volatile<LONG> g_fForbidEnterEE; -extern bool g_fFinalizerRunOnShutDown; // The CRST. class CrstBase diff --git a/src/vm/finalizerthread.cpp b/src/vm/finalizerthread.cpp index 2f72b07957..4c0f5acbf9 100644 --- a/src/vm/finalizerthread.cpp +++ b/src/vm/finalizerthread.cpp @@ -1281,14 +1281,14 @@ BOOL FinalizerThread::FinalizerThreadWatchDog() pThread->EnablePreemptiveGC(); } - g_fFinalizerRunOnShutDown = TRUE; + GCHeapUtilities::GetGCHeap()->SetFinalizeRunOnShutdown(true); // Wait for finalizer thread to finish finalizing all objects. hEventShutDownToFinalizer->Set(); BOOL fTimeOut = FinalizerThreadWatchDogHelper(); if (!fTimeOut) { - g_fFinalizerRunOnShutDown = FALSE; + GCHeapUtilities::GetGCHeap()->SetFinalizeRunOnShutdown(false); } // Can not call ExitProcess here if we are in a hosting environment. @@ -1313,7 +1313,8 @@ BOOL FinalizerThread::FinalizerThreadWatchDog() { pThread->EnablePreemptiveGC(); } - g_fFinalizerRunOnShutDown = TRUE; + + GCHeapUtilities::GetGCHeap()->SetFinalizeRunOnShutdown(true); hEventShutDownToFinalizer->Set(); DWORD status = WAIT_OBJECT_0; diff --git a/src/vm/gcenv.ee.cpp b/src/vm/gcenv.ee.cpp index 792e748f9d..61d06421ad 100644 --- a/src/vm/gcenv.ee.cpp +++ b/src/vm/gcenv.ee.cpp @@ -1308,3 +1308,11 @@ void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args) assert(!"unknown WriteBarrierOp enum"); } } + +void GCToEEInterface::EnableFinalization(bool foundFinalizers) +{ + if (foundFinalizers || FinalizerThread::HaveExtraWorkForFinalizer()) + { + FinalizerThread::EnableFinalization(); + } +} diff --git a/src/vm/gcenv.ee.h b/src/vm/gcenv.ee.h index f4312217ec..9aa3e59e36 100644 --- a/src/vm/gcenv.ee.h +++ b/src/vm/gcenv.ee.h @@ -42,6 +42,8 @@ public: void DiagWalkLOHSurvivors(void* gcContext); void DiagWalkBGCSurvivors(void* gcContext); void StompWriteBarrier(WriteBarrierParameters* args); + + void EnableFinalization(bool foundFinalizers); }; #endif // FEATURE_STANDALONE_GC diff --git a/src/vm/vars.cpp b/src/vm/vars.cpp index 626ca3c9d3..2ca77aec5b 100644 --- a/src/vm/vars.cpp +++ b/src/vm/vars.cpp @@ -241,7 +241,6 @@ GVAL_IMPL(SIZE_T, g_runtimeVirtualSize); #ifndef DACCESS_COMPILE Volatile<LONG> g_fForbidEnterEE = false; -bool g_fFinalizerRunOnShutDown = false; bool g_fManagedAttach = false; bool g_fNoExceptions = false; #ifdef FEATURE_COMINTEROP diff --git a/src/vm/vars.hpp b/src/vm/vars.hpp index 62d6656eaf..167d8e0d14 100644 --- a/src/vm/vars.hpp +++ b/src/vm/vars.hpp @@ -592,7 +592,6 @@ EXTERN BOOL g_fSuspendOnShutdown; EXTERN BOOL g_fSuspendFinalizerOnShutdown; #endif // DACCESS_COMPILE EXTERN Volatile<LONG> g_fForbidEnterEE; -EXTERN bool g_fFinalizerRunOnShutDown; GVAL_DECL(bool, g_fProcessDetach); EXTERN bool g_fManagedAttach; EXTERN bool g_fNoExceptions; |