From 41c8da5a8afe2b84bc3521729073a5e1468c86a1 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Thu, 19 Mar 2026 09:58:03 -0500 Subject: [PATCH 1/9] prepping for next flow alpha --- README.md | 9 +++++++++ VERSION_TEMPLATE | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d58525..97bc765 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,15 @@ Copyright © Rich Hickey and contributors ## Changelog +* next alpha + * Alpha release of core.async.flow - all APIs subject to change + * [ASYNC-274](https://clojure.atlassian.net/browse/ASYNC-274) (CLJ) Fixed flow/futurize stopped returning a future on Executor change + * [ASYNC-270](https://clojure.atlassian.net/browse/ASYNC-270) (CLJ) futurize with no :exec arg throws +* next release (accumulated changes since 1.8.741): + * Added datafy support for channels and buffers + * [ASYNC-273](https://clojure.atlassian.net/browse/ASYNC-273) (CLJ) alts!! callbacks should dispatch on caller when possible + * [ASYNC-272](https://clojure.atlassian.net/browse/ASYNC-272) (CLJ) Use JVM virtual threads in io-thread + * [ASYNC-269](https://clojure.atlassian.net/browse/ASYNC-269) (CLJ) Noop callbacks dispatch on caller thread * Release 1.9.859-alpha4 on 2026-03-16 * [ASYNC-273](https://clojure.atlassian.net/browse/ASYNC-273) (CLJ) alts!! callbacks should dispatch on caller when possible * [ASYNC-274](https://clojure.atlassian.net/browse/ASYNC-274) (CLJ) Fixed flow/futurize stopped returning a future on Executor change diff --git a/VERSION_TEMPLATE b/VERSION_TEMPLATE index 0b201e4..2da6a45 100755 --- a/VERSION_TEMPLATE +++ b/VERSION_TEMPLATE @@ -1 +1 @@ -1.9.GENERATED_VERSION-alpha4 +1.10.GENERATED_VERSION-alpha1 From 9d6ca8be4ddb0bbefd3d2db00e6f13239dbf92a7 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Thu, 19 Mar 2026 12:55:12 -0500 Subject: [PATCH 2/9] cherrypick from master --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 97bc765..ecc6028 100644 --- a/README.md +++ b/README.md @@ -18,20 +18,20 @@ A Clojure library providing facilities for async programming and communication. This project follows the version scheme MAJOR.MINOR.COMMITS where MAJOR and MINOR provide some relative indication of the size of the change, but do not follow semantic versioning. In general, all changes endeavor to be non-breaking (by moving to new names rather than by breaking existing names). COMMITS is an ever-increasing counter of commits since the beginning of this repository. -Latest release: 1.8.741 +Latest release: 1.9.865 * [All Released Versions](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.clojure%22%20AND%20a%3A%22core.async%22) [deps.edn](https://clojure.org/reference/deps_and_cli) dependency information: ```clj - org.clojure/core.async {:mvn/version "1.8.741"} + org.clojure/core.async {:mvn/version "1.9.865"} ``` [Leiningen](https://github.com/technomancy/leiningen) dependency information: ```clj - [org.clojure/core.async "1.8.741"] + [org.clojure/core.async "1.9.865"] ``` [Maven](http://maven.apache.org/) dependency information: @@ -40,7 +40,7 @@ Latest release: 1.8.741 org.clojure core.async - 1.8.741 + 1.9.865 ``` @@ -68,7 +68,7 @@ Copyright © Rich Hickey and contributors * Alpha release of core.async.flow - all APIs subject to change * [ASYNC-274](https://clojure.atlassian.net/browse/ASYNC-274) (CLJ) Fixed flow/futurize stopped returning a future on Executor change * [ASYNC-270](https://clojure.atlassian.net/browse/ASYNC-270) (CLJ) futurize with no :exec arg throws -* next release (accumulated changes since 1.8.741): +* Release 1.9.865 (accumulated changes since 1.8.741): * Added datafy support for channels and buffers * [ASYNC-273](https://clojure.atlassian.net/browse/ASYNC-273) (CLJ) alts!! callbacks should dispatch on caller when possible * [ASYNC-272](https://clojure.atlassian.net/browse/ASYNC-272) (CLJ) Use JVM virtual threads in io-thread From ffb16812d3d1b127594c648c35516f8a2eb5c816 Mon Sep 17 00:00:00 2001 From: clojure-build Date: Thu, 19 Mar 2026 18:07:00 +0000 Subject: [PATCH 3/9] [maven-release-plugin] prepare release v1.10.864-alpha1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d010746..4d04afc 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.clojure core.async - 1.9.860-SNAPSHOT + 1.10.864-alpha1 jar core.async Facilities for async programming and communication in Clojure @@ -27,7 +27,7 @@ scm:git:git://github.com/clojure/core.async.git scm:git:git@github.com:clojure/core.async.git https://github.com/clojure/core.async - HEAD + v1.10.864-alpha1 From 0ed4317c106dcfd91d987c8d2c089c7927ccf8d6 Mon Sep 17 00:00:00 2001 From: clojure-build Date: Thu, 19 Mar 2026 18:07:00 +0000 Subject: [PATCH 4/9] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4d04afc..2498912 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.clojure core.async - 1.10.864-alpha1 + 1.10.865-SNAPSHOT jar core.async Facilities for async programming and communication in Clojure @@ -27,7 +27,7 @@ scm:git:git://github.com/clojure/core.async.git scm:git:git@github.com:clojure/core.async.git https://github.com/clojure/core.async - v1.10.864-alpha1 + HEAD From 76c2b26ae10283aaa0875e99f927a9d6b3b202b0 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Thu, 19 Mar 2026 13:08:09 -0500 Subject: [PATCH 5/9] update for release --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ecc6028..4e6ec55 100644 --- a/README.md +++ b/README.md @@ -64,11 +64,11 @@ Copyright © Rich Hickey and contributors ## Changelog -* next alpha +* Release 1.10.864-alpha1 on 2026-03-19 * Alpha release of core.async.flow - all APIs subject to change * [ASYNC-274](https://clojure.atlassian.net/browse/ASYNC-274) (CLJ) Fixed flow/futurize stopped returning a future on Executor change * [ASYNC-270](https://clojure.atlassian.net/browse/ASYNC-270) (CLJ) futurize with no :exec arg throws -* Release 1.9.865 (accumulated changes since 1.8.741): +* Release 1.9.865 on 2026-03-19 (accumulated changes since 1.8.741) * Added datafy support for channels and buffers * [ASYNC-273](https://clojure.atlassian.net/browse/ASYNC-273) (CLJ) alts!! callbacks should dispatch on caller when possible * [ASYNC-272](https://clojure.atlassian.net/browse/ASYNC-272) (CLJ) Use JVM virtual threads in io-thread From 3c7a7b85663858fae980cd63956eeb6ade1c8b3f Mon Sep 17 00:00:00 2001 From: Fogus Date: Wed, 1 Apr 2026 13:01:26 -0400 Subject: [PATCH 6/9] ASYNC-275: Changed futurize return Future from CompletableFuture to FutureTask to match the same type returned from ExecutorService.submit. Added a regression test to catch this case. --- .../clojure/clojure/core/async/flow/impl.clj | 6 ++--- .../clojure/clojure/core/async/flow_test.clj | 24 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/clojure/clojure/core/async/flow/impl.clj b/src/main/clojure/clojure/core/async/flow/impl.clj index 8486eaa..36d0b0b 100644 --- a/src/main/clojure/clojure/core/async/flow/impl.clj +++ b/src/main/clojure/clojure/core/async/flow/impl.clj @@ -14,7 +14,7 @@ [clojure.core.async.impl.dispatch :as disp] [clojure.walk :as walk] [clojure.datafy :as datafy]) - (:import [java.util.concurrent Future Executor TimeUnit CompletableFuture] + (:import [java.util.concurrent Future Executor TimeUnit FutureTask] [java.util.concurrent.locks ReentrantLock])) (set! *warn-on-reflection* true) @@ -31,8 +31,8 @@ (let [^Executor e (if (instance? Executor exec) exec (disp/executor-for exec)) - fut (CompletableFuture.)] - (.execute e #(.complete fut (apply f args))) + fut (FutureTask. #(apply f args))] + (.execute e fut) fut))) (defn prep-proc [ret pid {:keys [proc, args, chan-opts] :or {chan-opts {}}}] diff --git a/src/test/clojure/clojure/core/async/flow_test.clj b/src/test/clojure/clojure/core/async/flow_test.clj index d215258..fa81b90 100644 --- a/src/test/clojure/clojure/core/async/flow_test.clj +++ b/src/test/clojure/clojure/core/async/flow_test.clj @@ -5,20 +5,28 @@ ;; By using this software in any fashion, you are agreeing to be bound by ;; the terms of this license. ;; You must not remove this notice, or any other, from this software. - (ns clojure.core.async.flow-test (:require [clojure.test :refer :all] - [clojure.core.async.flow :as flow])) + [clojure.core.async.flow :as flow]) + (:import [java.util.concurrent TimeUnit Future ExecutionException])) + +(set! *warn-on-reflection* true) (deftest test-futurize - (testing "" + (testing "Happy path use of futurize" (let [in-es? (atom false) es (reify java.util.concurrent.Executor - (^void execute [_ ^Runnable f] - (reset! in-es? true) - (future-call f)))] + (^void execute [_ ^Runnable r] + (reset! in-es? true) + (future (.run r))))] (is (= 16 @((flow/futurize #(* % %) {:exec :mixed}) 4))) (is (= 16 @((flow/futurize #(* % %)) 4))) (is (= 16 @((flow/futurize #(* % %) {:exec es}) 4))) - (is @in-es?)))) - + (is @in-es?))) + (testing "ASYNC-275 regression: futurize Future instance propagates exceptions" + (let [cause (ex-info "boom" {}) + fut ((flow/futurize (fn [] (throw cause)) {:exec :mixed})) + ex (try + (.get ^Future fut 1000 TimeUnit/MILLISECONDS) + (catch ExecutionException e e))] + (is (= cause (.getCause ^ExecutionException ex)))))) From a0b22a66caa405118f4633830b8a46667daa8db3 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Mon, 6 Apr 2026 14:35:53 -0500 Subject: [PATCH 7/9] update changelog --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4e6ec55..18f2b97 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,8 @@ Copyright © Rich Hickey and contributors ## Changelog +* next on 2026-04-06 + * [ASYNC-275](https://clojure.atlassian.net/browse/ASYNC-275) (CLJ) Fixed flow/futurize to retain original behavior of propagating exceptions * Release 1.10.864-alpha1 on 2026-03-19 * Alpha release of core.async.flow - all APIs subject to change * [ASYNC-274](https://clojure.atlassian.net/browse/ASYNC-274) (CLJ) Fixed flow/futurize stopped returning a future on Executor change From f750287d2cd533271f9e05fb7c31092969b7edf5 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Mon, 6 Apr 2026 14:36:17 -0500 Subject: [PATCH 8/9] update version template --- VERSION_TEMPLATE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION_TEMPLATE b/VERSION_TEMPLATE index 2da6a45..bd1b496 100755 --- a/VERSION_TEMPLATE +++ b/VERSION_TEMPLATE @@ -1 +1 @@ -1.10.GENERATED_VERSION-alpha1 +1.10.GENERATED_VERSION-alpha2 From 97a781f88df314a02239efd572229b8b9cb6ef08 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Mon, 6 Apr 2026 14:38:27 -0500 Subject: [PATCH 9/9] update for release --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18f2b97..42257a0 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Copyright © Rich Hickey and contributors ## Changelog -* next on 2026-04-06 +* Release 1.10.870-alpha2 on 2026-04-06 * [ASYNC-275](https://clojure.atlassian.net/browse/ASYNC-275) (CLJ) Fixed flow/futurize to retain original behavior of propagating exceptions * Release 1.10.864-alpha1 on 2026-03-19 * Alpha release of core.async.flow - all APIs subject to change