diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-07-22 14:21:05 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-10-12 16:21:24 +0900 |
| commit | 2b45d454bc20b8f34695997c46a16a9d16d28faa (patch) | |
| tree | 405dad4ab47601feac705981ce3d7c96c884a5a2 /src/array.c | |
| parent | ff0e3bcea6fd7d34d4fc6f3f78ef3e4120825401 (diff) | |
| download | mruby-2b45d454bc20b8f34695997c46a16a9d16d28faa.tar.gz mruby-2b45d454bc20b8f34695997c46a16a9d16d28faa.zip | |
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.
Diffstat (limited to 'src/array.c')
| -rw-r--r-- | src/array.c | 2 |
1 files changed, 1 insertions, 1 deletions
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++; } |
