mirror of
https://github.com/janet-lang/janet
synced 2025-07-05 11:32:54 +00:00
Fix gc leak.
Rather than trying to be clever with pinning/unpinning, always mark the root fiber and that should serve as thei singular common root in almost all cases.
This commit is contained in:
parent
caa6576719
commit
1b0edf54f1
@ -404,6 +404,7 @@ void janet_collect(void) {
|
|||||||
#ifdef JANET_EV
|
#ifdef JANET_EV
|
||||||
janet_ev_mark();
|
janet_ev_mark();
|
||||||
#endif
|
#endif
|
||||||
|
janet_mark_fiber(janet_vm_root_fiber);
|
||||||
for (i = 0; i < orig_rootcount; i++)
|
for (i = 0; i < orig_rootcount; i++)
|
||||||
janet_mark(janet_vm_roots[i]);
|
janet_mark(janet_vm_roots[i]);
|
||||||
while (orig_rootcount < janet_vm_root_count) {
|
while (orig_rootcount < janet_vm_root_count) {
|
||||||
|
@ -1376,7 +1376,6 @@ static JanetSignal janet_continue_no_check(JanetFiber *fiber, Janet in, Janet *o
|
|||||||
/* Normal setup */
|
/* Normal setup */
|
||||||
if (janet_vm_root_fiber == NULL) janet_vm_root_fiber = fiber;
|
if (janet_vm_root_fiber == NULL) janet_vm_root_fiber = fiber;
|
||||||
janet_vm_fiber = fiber;
|
janet_vm_fiber = fiber;
|
||||||
janet_gcroot(janet_wrap_fiber(fiber));
|
|
||||||
janet_fiber_set_status(fiber, JANET_STATUS_ALIVE);
|
janet_fiber_set_status(fiber, JANET_STATUS_ALIVE);
|
||||||
signal = run_vm(fiber, in);
|
signal = run_vm(fiber, in);
|
||||||
}
|
}
|
||||||
@ -1384,7 +1383,6 @@ static JanetSignal janet_continue_no_check(JanetFiber *fiber, Janet in, Janet *o
|
|||||||
/* Restore */
|
/* Restore */
|
||||||
if (janet_vm_root_fiber == fiber) janet_vm_root_fiber = NULL;
|
if (janet_vm_root_fiber == fiber) janet_vm_root_fiber = NULL;
|
||||||
janet_fiber_set_status(fiber, signal);
|
janet_fiber_set_status(fiber, signal);
|
||||||
janet_gcunroot(janet_wrap_fiber(fiber));
|
|
||||||
janet_restore(&tstate);
|
janet_restore(&tstate);
|
||||||
*out = tstate.payload;
|
*out = tstate.payload;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user