diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-12-08 12:50:39 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2016-12-08 12:50:39 +0900 |
| commit | 0d38ede33b3ff9fe5d5ce2c32d4a9325fc1d1b3e (patch) | |
| tree | 104ffc77c0f4f9ed3c01b95877abb30b32226841 /src | |
| parent | 5930a6ebc7a5ebf0c9b2dfe1d250935e6ddaeceb (diff) | |
| parent | c2e749f878049204239ad63ac9546253aeb6ceeb (diff) | |
| download | mruby-0d38ede33b3ff9fe5d5ce2c32d4a9325fc1d1b3e.tar.gz mruby-0d38ede33b3ff9fe5d5ce2c32d4a9325fc1d1b3e.zip | |
Merge pull request #3333 from kazuho/kazuho/mrb_gc_unregister
fix issues of mrb_gc_unregister introduced in 09b1185
Diffstat (limited to 'src')
| -rw-r--r-- | src/gc.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -453,7 +453,7 @@ mrb_gc_unregister(mrb_state *mrb, mrb_value obj) mrb_sym root = mrb_intern_lit(mrb, GC_ROOT_NAME); mrb_value table = mrb_gv_get(mrb, root); struct RArray *a; - mrb_int i, len; + mrb_int i; if (mrb_nil_p(table)) return; if (mrb_type(table) != MRB_TT_ARRAY) { @@ -462,14 +462,13 @@ mrb_gc_unregister(mrb_state *mrb, mrb_value obj) } a = mrb_ary_ptr(table); mrb_ary_modify(mrb, a); - len = a->len-1; - for (i=0; i<len; i++) { + for (i = 0; i < a->len; i++) { if (mrb_obj_eq(mrb, a->ptr[i], obj)) { - memmove(&a->ptr[i], &a->ptr[i+1], len-i); + a->len--; + memmove(&a->ptr[i], &a->ptr[i + 1], (a->len - i) * sizeof(a->ptr[i])); break; } } - a->len--; } MRB_API struct RBasic* |
