From 7366fbed1fa52add394a7c35720bb43043780d8e Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Wed, 28 Jan 2026 10:07:23 -0600 Subject: [PATCH] Disallow scheduling already modified fibers. While not strictly needed for correctness, this discourages misuse of fibers and mixing both coroutine, error handling, and scheduling purposes. --- src/core/ev.c | 3 +++ test/suite-ev2.janet | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/src/core/ev.c b/src/core/ev.c index 70408f40..e3be60c2 100644 --- a/src/core/ev.c +++ b/src/core/ev.c @@ -3038,6 +3038,9 @@ JANET_CORE_FN(cfun_ev_go, fiber->env->proto = janet_vm.fiber->env; } else { fiber = janet_getfiber(argv, 0); + if (janet_fiber_status(fiber) != JANET_STATUS_NEW) { + janet_panic("can only schedule new fibers where (= (fiber/status f) :new)"); + } } fiber->supervisor_channel = supervisor; janet_schedule(fiber, value); diff --git a/test/suite-ev2.janet b/test/suite-ev2.janet index bcb6dd7f..c94a2d86 100644 --- a/test/suite-ev2.janet +++ b/test/suite-ev2.janet @@ -78,4 +78,10 @@ (ev/sleep 0.1) # can we do better? (assert (= 0 (ev/count supervisor)) "empty supervisor") +# Issue #1707 +(def f (coro (repeat 10 (yield 1)))) +(resume f) +(assert-error "cannot schedule non-new fiber" + (ev/go f)) + (end-suite)