Skip to content

Commit

Permalink
do not destroy a page with an active TT_ENV (e.g. an env referred fro…
Browse files Browse the repository at this point in the history
…m TT_FIBER)
  • Loading branch information
kazuho committed Dec 10, 2016
1 parent 7b968ca commit 2ef634e
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -741,10 +741,12 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
{
struct REnv *e = (struct REnv*)obj;

if (!MRB_ENV_STACK_SHARED_P(e)) {
mrb_free(mrb, e->stack);
e->stack = NULL;
if (MRB_ENV_STACK_SHARED_P(e)) {
/* cannot be freed */
return;
}
mrb_free(mrb, e->stack);
e->stack = NULL;
}
break;

Expand Down Expand Up @@ -998,9 +1000,13 @@ incremental_sweep_phase(mrb_state *mrb, mrb_gc *gc, size_t limit)
if (is_dead(gc, &p->as.basic)) {
if (p->as.basic.tt != MRB_TT_FREE) {
obj_free(mrb, &p->as.basic);
p->as.free.next = page->freelist;
page->freelist = (struct RBasic*)p;
freed++;
if (p->as.basic.tt == MRB_TT_FREE) {
p->as.free.next = page->freelist;
page->freelist = (struct RBasic*)p;
freed++;
} else {
dead_slot = 0;
}
}
}
else {
Expand Down

0 comments on commit 2ef634e

Please sign in to comment.