Declined
Details
Assignee
UnassignedUnassignedReporter
Alexander YakushevAlexander YakushevPriority
Major
Details
Details
Assignee
Unassigned
UnassignedReporter
Alexander Yakushev
Alexander YakushevPriority

Created September 16, 2016 at 1:54 PM
Updated February 13, 2017 at 8:41 PM
Resolved February 13, 2017 at 8:41 PM
Say we have a channel with a fixed buffer and a generating transducer (e.g.
cat
), and a pending put is scheduled into that channel. Then, the take from the channel will invoke the first pending put, even if the buffer is still full after the take.Example scenario:
Because of this, I cannot use backpressure with generative transducers, since the size of the fixed buffer, in this case, may grow infinitely.
I believe, the issue is here: https://github.com/clojure/core.async/blob/master/src/main/clojure/clojure/core/async/impl/channels.clj#L182. If the buffer was checked for fullness before the first pending put is executed, the issue would be solved. If this is confirmed to be a bug (not the intended behavior) I will submit a patch.