From a15274d43148afc131ac6a3f9ef9a974c7de58a1 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 26 Nov 2025 17:20:11 +0100 Subject: [PATCH] Revise volatile access to singletonInstance field For defensiveness against a singletonInstance/initialized visibility mismatch, we accept the locking overhead for pre-initialized null values (where we need the initialized field) in favor of a defensive fast path for non-null values (where we only need the singletonInstance field). Closes gh-35905 --- .../util/function/SingletonSupplier.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/util/function/SingletonSupplier.java b/spring-core/src/main/java/org/springframework/util/function/SingletonSupplier.java index 79893dfb203..f001c2b2581 100644 --- a/spring-core/src/main/java/org/springframework/util/function/SingletonSupplier.java +++ b/spring-core/src/main/java/org/springframework/util/function/SingletonSupplier.java @@ -47,12 +47,13 @@ public class SingletonSupplier implements Supplier implements Supplier + // specific determination follows within full initialization lock. + // Pre-initialized null values are rare, so we accept the locking + // overhead in favor of a defensive fast path for non-null values. + this.initializationLock.lock(); try { instance = this.singletonInstance; if (!this.initialized) { @@ -115,7 +120,7 @@ public class SingletonSupplier implements Supplier