mirror of
https://github.com/janet-lang/janet
synced 2025-05-04 00:14:14 +00:00
Fix ev/gather to cancel children on cancellation.
Otherwise, we would be leaving zombie fibers around.
This commit is contained in:
parent
9582d3c623
commit
4e8154cf8a
@ -3583,13 +3583,16 @@
|
|||||||
(,ev/deadline ,deadline nil ,f)
|
(,ev/deadline ,deadline nil ,f)
|
||||||
(,resume ,f))))
|
(,resume ,f))))
|
||||||
|
|
||||||
|
(defn- cancel-all [fibers reason] (each f fibers (if (fiber/can-resume? f) (ev/cancel f reason))))
|
||||||
|
|
||||||
(defn- wait-for-fibers
|
(defn- wait-for-fibers
|
||||||
[chan fibers]
|
[chan fibers]
|
||||||
(repeat (length fibers)
|
(defer (cancel-all fibers "parent canceled")
|
||||||
(def [sig fiber] (ev/take chan))
|
(repeat (length fibers)
|
||||||
(unless (= sig :ok)
|
(def [sig fiber] (ev/take chan))
|
||||||
(each f fibers (ev/cancel f "sibling canceled"))
|
(unless (= sig :ok)
|
||||||
(propagate (fiber/last-value fiber) fiber))))
|
(cancel-all fibers "sibling canceled")
|
||||||
|
(propagate (fiber/last-value fiber) fiber)))))
|
||||||
|
|
||||||
(defmacro ev/gather
|
(defmacro ev/gather
|
||||||
``
|
``
|
||||||
|
Loading…
x
Reference in New Issue
Block a user