1
0
mirror of https://github.com/janet-lang/janet synced 2025-05-02 07:24:15 +00:00

Fix ev/gather to cancel children on cancellation.

Otherwise, we would be leaving zombie fibers around.
This commit is contained in:
Calvin Rose 2023-02-05 09:43:16 -06:00
parent 9582d3c623
commit 4e8154cf8a

View File

@ -3583,13 +3583,16 @@
(,ev/deadline ,deadline nil ,f)
(,resume ,f))))
(defn- cancel-all [fibers reason] (each f fibers (if (fiber/can-resume? f) (ev/cancel f reason))))
(defn- wait-for-fibers
[chan fibers]
(repeat (length fibers)
(def [sig fiber] (ev/take chan))
(unless (= sig :ok)
(each f fibers (ev/cancel f "sibling canceled"))
(propagate (fiber/last-value fiber) fiber))))
(defer (cancel-all fibers "parent canceled")
(repeat (length fibers)
(def [sig fiber] (ev/take chan))
(unless (= sig :ok)
(cancel-all fibers "sibling canceled")
(propagate (fiber/last-value fiber) fiber)))))
(defmacro ev/gather
``