From 2b45d454bc20b8f34695997c46a16a9d16d28faa Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 22 Jul 2020 14:21:05 +0900 Subject: Use `mrb_field_write_barrier` instead of `mrb_write_barrier` for `push`. When the array is very big, the simpler `mrb_write_barrier` causes calling `gc_mark_children` for big arrays repeatedly. That would hinder performance very badly. --- src/array.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/array.c b/src/array.c index 150ef2126..4f2b5466c 100644 --- a/src/array.c +++ b/src/array.c @@ -524,7 +524,7 @@ mrb_ary_push_m(mrb_state *mrb, mrb_value self) } array_copy(ARY_PTR(a)+len, argv, argc); ARY_SET_LEN(a, len2); - while (alen--) { + while (argc--) { mrb_field_write_barrier_value(mrb, (struct RBasic*)a, *argv); argv++; } -- cgit v1.2.3