2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!有关如何操作的更多信息,请参阅关于 页面。

+1
core.async

(let [closed (doto (a/chan) a/close!)
      open (a/chan)]
  (a/go-loop [])
    (a/alts! [open [closed true]] :priority true)
    (recur)))


引发异常


线程 "async-dispatch-1" 中出现异常 java.lang.AssertionError:断言失败:单个通道上不允许超过 1024 个挂起的提取操作。
(< (.size takes) impl/MAX-QUEUE-SIZE)
    在 clojure.core.async.impl.channels.ManyToManyChannel.take_BANG_(channels.clj:235)
    在 clojure.core.async$do_alts$fn__8030.invoke(async.clj:253)
    在 clojure.core.async$do_alts.invokeStatic(async.clj:245)
    在 clojure.core.async$do_alts.invoke(async.clj:237)


我的分析是在尝试在关闭的通道上写入时,处理器应该被提交,以便允许清理其他通道上的处理器注册。

参见 https://github.com/clojure/core.async/blob/822920a45e5ea7fa28641922559fdeb888c15d05/src/main/clojure/clojure/core/async/impl/channels.clj#L74-L75

3 个回答

0

评论由:cgrand 制作

附加补丁

0

评论由:tdg5 制作

感谢您为此缺陷/补丁记录并提交补丁,基督徒!

有东西阻挡了对此缺陷/补丁的进一步行动吗?我能做些什么来推动修复的进度?

我可以确认该缺陷的存在,并且附带的补丁解决了该问题。我还可以确认,在应用附带的补丁并更新到core.async的最新版本(https://github.com/clojure/core.async/commit/196f87dc21f55f601c867b796a0a421550b43c8f)之后,所有测试都通过了。

在我遇到这个bug的系统上,实际上根本问题是被放入的通道被提前关闭。实际上,如果没有这个bug,我的团队可能就不会注意到put通道被提前关闭(实际上,我们没有注意到好几个月,直到合适的条件出现)。或许隐藏这类问题是建议的补丁没有被接受的部分原因?

欢迎提出关于可操作后续步骤的建议。

0
by
...