From fe9e8854ea3cfb7ee0afb96ee815577842377d9d Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 9 Feb 2022 16:26:10 +0100 Subject: [PATCH] [jOOQ/jOOQ#12977] Correctly sequence close() call and completion delegation --- jOOQ/src/main/java/org/jooq/impl/R2DBC.java | 10 ++++++---- pom.xml | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/R2DBC.java b/jOOQ/src/main/java/org/jooq/impl/R2DBC.java index 6b7ad14c94..89c31d5393 100644 --- a/jOOQ/src/main/java/org/jooq/impl/R2DBC.java +++ b/jOOQ/src/main/java/org/jooq/impl/R2DBC.java @@ -583,16 +583,18 @@ final class R2DBC { delegate().connection.updateAndGet(c -> { + // [#12977] Correctly sequence the delegation to run after close completion + Runnable onComplete = cancelled ? () -> {} : () -> subscriber.onComplete(); + // close() calls on already closed resources have no effect, so // the side-effect is OK with the AtomicReference contract if (c != null) - c.close().subscribe(subscriber(s -> s.request(Long.MAX_VALUE), t -> {}, t -> {}, () -> {})); + c.close().subscribe(subscriber(s -> s.request(Long.MAX_VALUE), t -> {}, t -> {}, onComplete)); + else + onComplete.run(); return null; }); - - if (!cancelled) - subscriber.onComplete(); } abstract ConnectionSubscriber delegate(); diff --git a/pom.xml b/pom.xml index 8708cdaf36..8a88fd8a98 100644 --- a/pom.xml +++ b/pom.xml @@ -457,6 +457,11 @@ spring-jdbc ${spring.version} + + org.springframework + spring-r2dbc + ${spring.version} + org.springframework spring-tx