Fix race condition in AbstractRedisReactiveCommands.getScheduler #3271
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request addresses the thread-safety issue in the lazy initialization logic of
AbstractRedisReactiveCommands.getScheduler()
.Problem:
As described in issue #3272, the previous implementation, despite using a
volatile
field forscheduler
, suffered from a race condition. Multiple threads could pass the initialnull
check concurrently before the field was assigned, leading to the initialization logic potentially running multiple times. This is because the "check-then-act" sequence was not atomic.Solution:
This change implements the full Double-Checked Locking (DCL) pattern by adding a
synchronized(this)
block. This block protects the second null check and the assignment to thescheduler
field, ensuring that the initialization happens exactly once and is safely published to all threads. The existingvolatile
keyword is essential for the correctness of DCL.This approach guarantees thread-safe lazy initialization and prevents potential resource issues caused by redundant initialization attempts.
Related Issue: Closes #3272
Make sure that:
mvn formatter:format
target. Don’t submit any formatting related changes.