From f85e40b79660fceb9bfe4a911b4d874da43eb03e Mon Sep 17 00:00:00 2001 From: Vadim Mutilin Date: Mon, 14 Apr 2025 19:32:55 +0300 Subject: [PATCH] Fix data race on sweptList_ in TryFillSweptRegion Do not check the list without locks. Instead use GetSweptRegionSafe. See issue #IC14SE Change-Id: Ib5948b986cd249dc0bd475cec8455e177c4293f8 Signed-off-by: Vadim Mutilin --- ecmascript/mem/sparse_space.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ecmascript/mem/sparse_space.cpp b/ecmascript/mem/sparse_space.cpp index d6b7029eb5..fa453ae928 100644 --- a/ecmascript/mem/sparse_space.cpp +++ b/ecmascript/mem/sparse_space.cpp @@ -169,16 +169,17 @@ void SparseSpace::Sweep() bool SparseSpace::TryFillSweptRegion() { - if (sweptList_.empty()) { + Region *region = GetSweptRegionSafe(); + if (region == nullptr) { return false; } - Region *region = nullptr; - while ((region = GetSweptRegionSafe()) != nullptr) { + do { allocator_->CollectFreeObjectSet(region); region->ResetSwept(); region->MergeOldToNewRSetForCS(); region->MergeLocalToShareRSetForCS(); - } + region = GetSweptRegionSafe(); + } while (region != nullptr); return true; } -- Gitee