From 625abba5e85b4086ba1785138c2e8078c7a90775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Fri, 6 Feb 2026 10:42:06 +0100 Subject: [PATCH] chore: prevent start and stop to run in parallel Synchronize the start() and stop() methods of the session maintainer to prevent them from running at the same time. That could cause a data race on the scheduled future that the start() method sets, and the stop() method reads. --- .../cloud/spanner/MultiplexedSessionDatabaseClient.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java index d4fc3c6d75..867786be84 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java @@ -562,7 +562,7 @@ final class MultiplexedSessionMaintainer { this.clock = clock; } - void start() { + private synchronized void start() { // Schedule the maintainer to run once every ten minutes (by default). long loopFrequencyMillis = MultiplexedSessionDatabaseClient.this @@ -577,7 +577,7 @@ void start() { this::maintain, loopFrequencyMillis, loopFrequencyMillis, TimeUnit.MILLISECONDS); } - void stop() { + private synchronized void stop() { if (this.scheduledFuture != null) { this.scheduledFuture.cancel(false); }