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

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

0
ClojureScript

garner.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报告)
...