summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorSean Gillespie <sean@swgillespie.me>2017-01-23 16:50:51 -0800
committerGitHub <noreply@github.com>2017-01-23 16:50:51 -0800
commitace6d1b728f4041d351cbf05e9356a23305be182 (patch)
treeac095ca5c008b46907d7b777f553518f2e4952db /src/vm
parent8305136b93cc017343c028b60ab0aae98825d59f (diff)
downloadcoreclr-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.h1
-rw-r--r--src/vm/finalizerthread.cpp7
-rw-r--r--src/vm/gcenv.ee.cpp8
-rw-r--r--src/vm/gcenv.ee.h2
-rw-r--r--src/vm/vars.cpp1
-rw-r--r--src/vm/vars.hpp1
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;