From e03b605684997e5d1f3a3a48b0a72065e9e631a3 Mon Sep 17 00:00:00 2001 From: Dmitriy Tverdiakov Date: Tue, 29 Oct 2024 11:28:03 +0000 Subject: [PATCH] Make sure PooledBoltConnection.close is thread-safe --- .../bolt/pooledimpl/PooledBoltConnection.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/driver/src/main/java/org/neo4j/driver/internal/bolt/pooledimpl/PooledBoltConnection.java b/driver/src/main/java/org/neo4j/driver/internal/bolt/pooledimpl/PooledBoltConnection.java index 267485a641..5395759fb5 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/bolt/pooledimpl/PooledBoltConnection.java +++ b/driver/src/main/java/org/neo4j/driver/internal/bolt/pooledimpl/PooledBoltConnection.java @@ -269,9 +269,17 @@ public CompletionStage forceClose(String reason) { @Override public CompletionStage close() { - if (closeFuture == null) { - closeFuture = new CompletableFuture<>(); + CompletableFuture closeFuture; + var close = false; + synchronized (this) { + if (this.closeFuture == null) { + this.closeFuture = new CompletableFuture<>(); + close = true; + } + closeFuture = this.closeFuture; + } + if (close) { if (delegate.state() == BoltConnectionState.CLOSED) { purgeRunnable.run(); closeFuture.complete(null);