summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorKoichi Sasada <[email protected]>2021-02-18 15:47:32 +0900
committerKoichi Sasada <[email protected]>2021-02-18 16:40:59 +0900
commit969b824a0c7605e0e570631d967ad0de0c37d0bf (patch)
tree1cd36517465b6960353998c76962e5445eabfb43 /gc.c
parent42a16e5974c3919755013eeee0debb16ffb69ff5 (diff)
sync GC rest if needed
marking requires a barrier (stop all Ractors) and gc_enter() does it. However, it doesn't check rest event which can start marking. [Bug #17599]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4195
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 63a2268eaa..33d46328fc 100644
--- a/gc.c
+++ b/gc.c
@@ -8477,6 +8477,9 @@ gc_enter(rb_objspace_t *objspace, enum gc_enter_event event, unsigned int *lock_
RB_VM_LOCK_ENTER_LEV(lock_lev);
switch (event) {
+ case gc_enter_event_rest:
+ if (!is_marking(objspace)) break;
+ // fall through
case gc_enter_event_start:
case gc_enter_event_mark_continue:
// stop other ractors