From 7eb0798d64cee4cd127dd728af41a157b3c7c388 Mon Sep 17 00:00:00 2001 From: Alexander Shabalin Date: Wed, 15 Dec 2021 07:54:07 +0000 Subject: [PATCH] [K/N] Fix SafePointSlowPath in STMS ^KT-48537 Merge-request: KT-MR-5257 --- .../src/gc/stms/cpp/SameThreadMarkAndSweep.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/kotlin-native/runtime/src/gc/stms/cpp/SameThreadMarkAndSweep.cpp b/kotlin-native/runtime/src/gc/stms/cpp/SameThreadMarkAndSweep.cpp index a97b4c30fba..fc8d8a80bbc 100644 --- a/kotlin-native/runtime/src/gc/stms/cpp/SameThreadMarkAndSweep.cpp +++ b/kotlin-native/runtime/src/gc/stms/cpp/SameThreadMarkAndSweep.cpp @@ -103,12 +103,17 @@ ALWAYS_INLINE void gc::SameThreadMarkAndSweep::ThreadData::SafePointRegular(size } NO_INLINE void gc::SameThreadMarkAndSweep::ThreadData::SafePointSlowPath(SafepointFlag flag) noexcept { - RuntimeAssert(flag != SafepointFlag::kNone, "Must've been handled by the caller"); - // No need to check for kNeedsSuspend, because `suspendIfRequested` checks for its own atomic. - threadData_.suspensionData().suspendIfRequested(); - if (flag == SafepointFlag::kNeedsGC) { - RuntimeLogDebug({kTagGC}, "Attempt to GC at SafePoint"); - ScheduleAndWaitFullGC(); + switch (flag) { + case SafepointFlag::kNone: + RuntimeAssert(false, "Must've been handled by the caller"); + return; + case SafepointFlag::kNeedsSuspend: + threadData_.suspensionData().suspendIfRequested(); + return; + case SafepointFlag::kNeedsGC: + RuntimeLogDebug({kTagGC}, "Attempt to GC at SafePoint"); + ScheduleAndWaitFullGC(); + return; } }