This is an automated email from the ASF dual-hosted git repository.

krathbun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/main by this push:
     new 467183d38c Fixes unsafe iteration over a collection (#5461)
467183d38c is described below

commit 467183d38c9aa3d5bf22057f798dfa15ef8e1876
Author: Kevin Rathbun <krath...@apache.org>
AuthorDate: Thu Apr 10 09:42:15 2025 -0400

    Fixes unsafe iteration over a collection (#5461)
    
    AbstractFateStore's `deferred` collection was being iterated over
    without locking
---
 .../java/org/apache/accumulo/core/fate/AbstractFateStore.java  | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git 
a/core/src/main/java/org/apache/accumulo/core/fate/AbstractFateStore.java 
b/core/src/main/java/org/apache/accumulo/core/fate/AbstractFateStore.java
index e917246182..45f93250e4 100644
--- a/core/src/main/java/org/apache/accumulo/core/fate/AbstractFateStore.java
+++ b/core/src/main/java/org/apache/accumulo/core/fate/AbstractFateStore.java
@@ -202,10 +202,12 @@ public abstract class AbstractFateStore<T> implements 
FateStore<T> {
       if (seen.get() == 0) {
         if (beforeCount == unreservedRunnableCount.getCount()) {
           long waitTime = 5000;
-          if (!deferred.isEmpty()) {
-            waitTime = deferred.values().stream()
-                .mapToLong(countDownTimer -> 
countDownTimer.timeLeft(TimeUnit.MILLISECONDS)).min()
-                .getAsLong();
+          synchronized (deferred) {
+            if (!deferred.isEmpty()) {
+              waitTime = deferred.values().stream()
+                  .mapToLong(countDownTimer -> 
countDownTimer.timeLeft(TimeUnit.MILLISECONDS)).min()
+                  .getAsLong();
+            }
           }
 
           if (waitTime > 0) {

Reply via email to