fix segfault during GC from compileAll's cpyHArr(objs)
This commit is contained in:
parent
5458739cf2
commit
dcf26f88d7
4
src/vm.c
4
src/vm.c
@ -458,6 +458,7 @@ NOINLINE Block* compileAll(B bcq, B objs, B allBlocks, B allBodies, B indices, B
|
|||||||
u32* bc = (u32*)bca->a;
|
u32* bc = (u32*)bca->a;
|
||||||
usz bcIA = PIA(bca);
|
usz bcIA = PIA(bca);
|
||||||
Comp* comp = mm_alloc(sizeof(Comp), t_comp);
|
Comp* comp = mm_alloc(sizeof(Comp), t_comp);
|
||||||
|
NOGC_S;
|
||||||
comp->indices = indices;
|
comp->indices = indices;
|
||||||
comp->src = src;
|
comp->src = src;
|
||||||
comp->path = path;
|
comp->path = path;
|
||||||
@ -471,6 +472,7 @@ NOINLINE Block* compileAll(B bcq, B objs, B allBlocks, B allBodies, B indices, B
|
|||||||
comp->nameList = nameList;
|
comp->nameList = nameList;
|
||||||
comp->blockAm = 0;
|
comp->blockAm = 0;
|
||||||
comp->objs = NULL;
|
comp->objs = NULL;
|
||||||
|
NOGC_E;
|
||||||
// and now finally it's safe to allocate stuff
|
// and now finally it's safe to allocate stuff
|
||||||
HArr* objArr = (HArr*)cpyHArr(objs);
|
HArr* objArr = (HArr*)cpyHArr(objs);
|
||||||
comp->objs = objArr;
|
comp->objs = objArr;
|
||||||
@ -1118,7 +1120,7 @@ void block_visit(Value* x) {
|
|||||||
i32 am = c->bodyCount;
|
i32 am = c->bodyCount;
|
||||||
for (i32 i = 0; i < am; i++) mm_visitP(c->bodies[i]);
|
for (i32 i = 0; i < am; i++) mm_visitP(c->bodies[i]);
|
||||||
}
|
}
|
||||||
void comp_visit(Value* x) { Comp* c = (Comp *)x; mm_visitP(c->objs); mm_visit(c->src); mm_visit(c->indices); mm_visit(c->path); mm_visit(c->nameList); }
|
void comp_visit(Value* x) { Comp* c = (Comp *)x; if (c->objs!=NULL) mm_visitP(c->objs); mm_visit(c->src); mm_visit(c->indices); mm_visit(c->path); mm_visit(c->nameList); }
|
||||||
void funBl_visit(Value* x) { FunBlock* c = (FunBlock*)x; mm_visitP(c->sc); mm_visitP(c->bl); }
|
void funBl_visit(Value* x) { FunBlock* c = (FunBlock*)x; mm_visitP(c->sc); mm_visitP(c->bl); }
|
||||||
void md1Bl_visit(Value* x) { Md1Block* c = (Md1Block*)x; mm_visitP(c->sc); mm_visitP(c->bl); }
|
void md1Bl_visit(Value* x) { Md1Block* c = (Md1Block*)x; mm_visitP(c->sc); mm_visitP(c->bl); }
|
||||||
void md2Bl_visit(Value* x) { Md2Block* c = (Md2Block*)x; mm_visitP(c->sc); mm_visitP(c->bl); }
|
void md2Bl_visit(Value* x) { Md2Block* c = (Md2Block*)x; mm_visitP(c->sc); mm_visitP(c->bl); }
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user