From aee22beab93e14675371f8f125cce0f45bdfc05c Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 21 Feb 2025 15:32:45 +0100 Subject: [PATCH] virtual thread cult --- src/babashka/impl/clojure/core/async.clj | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/babashka/impl/clojure/core/async.clj b/src/babashka/impl/clojure/core/async.clj index d23de6c4..78411b3f 100644 --- a/src/babashka/impl/clojure/core/async.clj +++ b/src/babashka/impl/clojure/core/async.clj @@ -54,15 +54,12 @@ ([f] (thread-call f :mixed)) ([f workload] (let [c (async/chan 1) - binds (vars/get-thread-binding-frame) returning-to-chan (fn [bf] #(try (when-some [ret (bf)] (async/>!! c ret)) (finally (async/close! c)))) - f (fn [] - (vars/reset-thread-binding-frame binds) - (f))] + f (vars/binding-conveyor-fn f)] (-> f #_bound-fn* returning-to-chan (dispatch/exec workload)) c))) @@ -72,16 +69,14 @@ f when completed, then close." [f] (let [c (async/chan 1)] - (let [binds (vars/get-thread-binding-frame)] + (let [returning-to-chan (fn [bf] + #(try + (when-some [ret (bf)] + (async/>!! c ret)) + (finally (async/close! c)))) + f (vars/binding-conveyor-fn f)] (.execute virtual-executor - (fn [] - (vars/reset-thread-binding-frame binds) - (try - (let [ret (f)] - (when-not (nil? ret) - (async/>!! c ret))) - (finally - (async/close! c)))))) + (-> f returning-to-chan))) c)) (defn thread