From fab7aa20dc4c5856bb4759bbbde0bb88ffd439a2 Mon Sep 17 00:00:00 2001 From: Peter Sollich Date: Mon, 4 Nov 2019 10:07:00 +0100 Subject: [PATCH] Suspension fixes (#27578) * Two simple fixes to suspension issues seen in GCPerfSim: - Insert allow_fgc() call in background_mark_simple - this fixes the cases where there are a ton of GC handles referencing simple objects not containing pointers. - Change PING_JIT_TIMEOUT constant from 10 milliseconds to 1 millisecond. This fixes the case where return address hijacking doesn't work quickly, because the hijacked thread doesn't return (e.g. because it's in a loop doing further calls). In this case we have to retry the hijack, and changing the timeout constant makes this happen more quickly. --- src/gc/gc.cpp | 1 + src/vm/threadsuspend.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gc/gc.cpp b/src/gc/gc.cpp index a3b3fc771cb0..be21bfd9197e 100644 --- a/src/gc/gc.cpp +++ b/src/gc/gc.cpp @@ -19982,6 +19982,7 @@ gc_heap::background_mark_simple (uint8_t* o THREAD_NUMBER_DCL) background_mark_simple1 (o THREAD_NUMBER_ARG); } } + allow_fgc(); } } diff --git a/src/vm/threadsuspend.cpp b/src/vm/threadsuspend.cpp index 9ac413beaa4b..f2a29f87954b 100644 --- a/src/vm/threadsuspend.cpp +++ b/src/vm/threadsuspend.cpp @@ -57,7 +57,7 @@ extern "C" void RedirectedHandledJITCaseForGCStress_Stub(void); // Every PING_JIT_TIMEOUT ms, check to see if a thread in JITted code has wandered // into some fully interruptible code (or should have a different hijack to improve // our chances of snagging it at a safe spot). -#define PING_JIT_TIMEOUT 10 +#define PING_JIT_TIMEOUT 1 // When we find a thread in a spot that's not safe to abort -- how long to wait before // we try again.