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

欢迎!请查阅 关于 页面以了解更多关于如何使用本网站的信息。

0
ClojureScript

在 cljs.analyzer/load-core 中存在竞态条件。

`

?(:clj

(defn load-core []

 (when (not @-cljs-macros-loaded)
   (reset! -cljs-macros-loaded true)
   (if *cljs-macros-is-classpath*
     (locking load-mutex
       (load *cljs-macros-path*))
     (locking load-mutex
       (load-file *cljs-macros-path*))))
 (intern-macros 'cljs.core)))

`

当两个或多个具有独立 * } 绑定的线程同时调用 {{load-core}} 时,只有一个将触发实际的加载,其他线程将直接跳转到 {{intern-macros}} 并开始将其宏编译到其编译环境中。由于第一个线程的加载可能尚未完成加载实际的 cljs.core 宏,第二个线程在其编译环境中将有一个不完整的宏集。

相关: https://dev.clojure.org/jira/browse/CLJS-1963

1 答案

0
参考: https://clojure.atlassian.net/browse/CLJS-2381 (由 thheller 报告)
...