From a5de958b9b8bf48206054c5356590e84a65d8418 Mon Sep 17 00:00:00 2001 From: Ambrose Bonnaire-Sergeant Date: Sun, 22 Dec 2024 14:31:21 -0600 Subject: [PATCH] Make kaocha.jit/jit thread-safe --- CHANGELOG.md | 1 + src/kaocha/jit.clj | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2a55f26..3c24c760 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ## Fixed - Fix beholder watch functionality that would cause a NullPointerException earlier. +- Make `kaocha.jit/jit` thread-safe in Clojure 1.10+. For lower versions, best effort with printed warning. ## Changed diff --git a/src/kaocha/jit.clj b/src/kaocha/jit.clj index 4f0a951f..ca00177b 100644 --- a/src/kaocha/jit.clj +++ b/src/kaocha/jit.clj @@ -4,5 +4,10 @@ "Just in time loading of dependencies." [sym] `(do - (require '~(symbol (namespace sym))) + (locking ~(if (find-var 'clojure.core/requiring-resolve) + 'clojure.lang.RT/REQUIRE_LOCK + (do (binding [*err* *out*] + (println "WARNING: kaocha.jit is not thread-safe before Clojure 1.10")) + ::lock)) + (require '~(symbol (namespace sym)))) (find-var '~sym)))