diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-04 13:48:23 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-04 13:48:23 +0900 |
| commit | 8f52b88ee75fb3ca62931a1d3975c9cd78eae2d8 (patch) | |
| tree | 9fe11cba055d55bde91ced170ccc5e2b06b43980 /src/gc.c | |
| parent | 8e0f2313302871ddd713c3e8e6a9d4731426f308 (diff) | |
| download | mruby-8f52b88ee75fb3ca62931a1d3975c9cd78eae2d8.tar.gz mruby-8f52b88ee75fb3ca62931a1d3975c9cd78eae2d8.zip | |
No need to make env unshared in the finalization; fix #3425
Diffstat (limited to 'src/gc.c')
| -rw-r--r-- | src/gc.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -367,7 +367,7 @@ mrb_gc_init(mrb_state *mrb, mrb_gc *gc) #endif } -static void obj_free(mrb_state *mrb, struct RBasic *obj); +static void obj_free(mrb_state *mrb, struct RBasic *obj, int end); void free_heap(mrb_state *mrb, mrb_gc *gc) @@ -381,7 +381,7 @@ free_heap(mrb_state *mrb, mrb_gc *gc) page = page->next; for (p = objects(tmp), e=p+MRB_HEAP_PAGE_SIZE; p<e; p++) { if (p->as.free.tt != MRB_TT_FREE) - obj_free(mrb, &p->as.basic); + obj_free(mrb, &p->as.basic, TRUE); } mrb_free(mrb, tmp); } @@ -699,7 +699,7 @@ mrb_gc_mark(mrb_state *mrb, struct RBasic *obj) } static void -obj_free(mrb_state *mrb, struct RBasic *obj) +obj_free(mrb_state *mrb, struct RBasic *obj, int end) { DEBUG(printf("obj_free(%p,tt=%d)\n",obj,obj->tt)); switch (obj->tt) { @@ -753,7 +753,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj) case MRB_TT_FIBER: { struct mrb_context *c = ((struct RFiber*)obj)->cxt; - if (c && c != mrb->root_c) { + if (!end && c && c != mrb->root_c) { mrb_callinfo *ci = c->ci; mrb_callinfo *ce = c->cibase; @@ -1020,7 +1020,7 @@ incremental_sweep_phase(mrb_state *mrb, mrb_gc *gc, size_t limit) while (p<e) { if (is_dead(gc, &p->as.basic)) { if (p->as.basic.tt != MRB_TT_FREE) { - obj_free(mrb, &p->as.basic); + obj_free(mrb, &p->as.basic, FALSE); if (p->as.basic.tt == MRB_TT_FREE) { p->as.free.next = page->freelist; page->freelist = (struct RBasic*)p; |
