summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-17 17:20:29 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-17 18:13:26 +0900
commit7f11c8086a4b5924737223322e24be23e9ff34c5 (patch)
tree17cce7902781b0db9f377afbf771ada7a99d238e /gc.c
parent99b91453809be68c604f94416030addfff3d6142 (diff)
reduce barrier counts for GC events
mark needs barrier (stop other ractors), but other GC events don't need barriers (maybe...).
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3923
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index c067ac4745..a5ef670b81 100644
--- a/gc.c
+++ b/gc.c
@@ -8438,7 +8438,15 @@ gc_enter(rb_objspace_t *objspace, enum gc_enter_event event, unsigned int *lock_
{
// stop other ractors
RB_VM_LOCK_ENTER_LEV(lock_lev);
- rb_vm_barrier();
+
+ switch (event) {
+ case gc_enter_event_start:
+ case gc_enter_event_mark_continue:
+ rb_vm_barrier();
+ break;
+ default:
+ break;
+ }
gc_enter_count(event);
GC_ASSERT(during_gc == 0);