We're updating the issue view to help you get more done. 

Completion arity of transducer is called twice

Description

completion arity (1) of a transducer function is called twice in a channel

1 2 3 4 5 6 7 8 (let [xf (fn [rf] (fn ([] (println "INIT") (rf)) ([result] (println "COMPLETING") (rf result)) ([result input] (println "STEP") (rf result input)))) c (chan 10 xf)] (close! c) (println "RESULT" (<!! c)))

will print

1 2 3 COMPLETING COMPLETING RESULT nil

According to https://clojure.org/reference/transducers, it is probably a bug:

> A completing process must call the completion operation on the final accumulated value exactly once

Looks like completing fn is called at there places in core.async: https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L122 https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L146

Environment

None

Status

Assignee

Unassigned

Reporter

Jozef Wagner

Labels

Approval

None

Patch

None

Priority

Major