Skip to content

Commit 0d52cf2

Browse files
author
dnolen
committed
clojure.core/require is not thread safe, use locks
1 parent 865f0a9 commit 0d52cf2

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -496,13 +496,17 @@
496496
:name (symbol (str ns) (str k)))))]))
497497
(into {}))))))
498498

499+
(def load-mutex (Object.))
500+
499501
#?(:clj
500502
(defn load-core []
501503
(when (not @-cljs-macros-loaded)
502504
(reset! -cljs-macros-loaded true)
503505
(if *cljs-macros-is-classpath*
504-
(load *cljs-macros-path*)
505-
(load-file *cljs-macros-path*)))
506+
(locking load-mutex
507+
(load *cljs-macros-path*))
508+
(locking load-mutex
509+
(load-file *cljs-macros-path*))))
506510
(intern-macros 'cljs.core)))
507511

508512
#?(:clj
@@ -2502,16 +2506,20 @@
25022506
(get-in reloads [:use-macros nsym])
25032507
(and (= nsym name) *reload-macros* :reload))]
25042508
(if k
2505-
(clojure.core/require nsym k)
2506-
(clojure.core/require nsym))
2509+
(locking load-mutex
2510+
(clojure.core/require nsym k))
2511+
(locking load-mutex
2512+
(clojure.core/require nsym)))
25072513
(intern-macros nsym k)))
25082514
(doseq [nsym (vals require-macros)]
25092515
(let [k (or (:require-macros reload)
25102516
(get-in reloads [:require-macros nsym])
25112517
(and (= nsym name) *reload-macros* :reload))]
25122518
(if k
2513-
(clojure.core/require nsym k)
2514-
(clojure.core/require nsym))
2519+
(locking load-mutex
2520+
(clojure.core/require nsym k))
2521+
(locking load-mutex
2522+
(clojure.core/require nsym)))
25152523
(intern-macros nsym k)))
25162524
(when (seq use-macros)
25172525
(check-use-macros use-macros env)))

0 commit comments

Comments
 (0)