diff options
author | Koichi Sasada <[email protected]> | 2021-02-18 15:47:32 +0900 |
---|---|---|
committer | Koichi Sasada <[email protected]> | 2021-02-18 16:40:59 +0900 |
commit | 969b824a0c7605e0e570631d967ad0de0c37d0bf (patch) | |
tree | 1cd36517465b6960353998c76962e5445eabfb43 /gc.c | |
parent | 42a16e5974c3919755013eeee0debb16ffb69ff5 (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.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -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 |