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

elecharny pushed a commit to branch bugfix/DIRMINA-1173
in repository https://gitbox.apache.org/repos/asf/mina.git

commit cc86146f662bd29cfbe5722662d9e970301b348d
Author: emmanuel lecharny <elecha...@apache.org>
AuthorDate: Fri Apr 26 21:00:27 2024 +0200

    Used an AtomicBooleaninstead of using a lock
---
 .../apache/mina/core/future/DefaultIoFuture.java   | 29 +++++++++++-----------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git 
a/mina-core/src/main/java/org/apache/mina/core/future/DefaultIoFuture.java 
b/mina-core/src/main/java/org/apache/mina/core/future/DefaultIoFuture.java
index 40386d55b..1ff5d915b 100644
--- a/mina-core/src/main/java/org/apache/mina/core/future/DefaultIoFuture.java
+++ b/mina-core/src/main/java/org/apache/mina/core/future/DefaultIoFuture.java
@@ -22,6 +22,7 @@ package org.apache.mina.core.future;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.mina.core.polling.AbstractPollingIoProcessor;
 import org.apache.mina.core.service.IoProcessor;
@@ -55,7 +56,7 @@ public class DefaultIoFuture implements IoFuture {
     private Object result;
 
     /** The flag used to determinate if the Future is completed or not */
-    private boolean ready;
+    private AtomicBoolean ready = new AtomicBoolean(false);
 
     /** A counter for the number of threads waiting on this future */
     private int waiters;
@@ -102,7 +103,7 @@ public class DefaultIoFuture implements IoFuture {
     @Override
     public IoFuture await() throws InterruptedException {
         synchronized (lock) {
-            while (!ready) {
+            while (!ready.get()) {
                 waiters++;
                 
                 try {
@@ -113,7 +114,7 @@ public class DefaultIoFuture implements IoFuture {
                 } finally {
                     waiters--;
                     
-                    if (!ready) {
+                    if (!ready.get()) {
                         checkDeadLock();
                     }
                 }
@@ -200,8 +201,8 @@ public class DefaultIoFuture implements IoFuture {
         synchronized (lock) {
             // We can quit if the ready flag is set to true, or if
             // the timeout is set to 0 or below : we don't wait in this case.
-            if (ready||(timeoutMillis <= 0)) {
-                return ready;
+            if (ready.get()||(timeoutMillis <= 0)) {
+                return ready.get();
             }
 
             // The operation is not completed : we have to wait
@@ -222,8 +223,8 @@ public class DefaultIoFuture implements IoFuture {
                         }
                     }
 
-                    if (ready || (endTime < System.currentTimeMillis())) {
-                        return ready;
+                    if (ready.get() || (endTime < System.currentTimeMillis())) 
{
+                        return ready.get();
                     } else {
                         // Take a chance, detect a potential deadlock
                         checkDeadLock();
@@ -237,7 +238,7 @@ public class DefaultIoFuture implements IoFuture {
                 // In any case, we decrement the number of waiters, and we get 
out.
                 waiters--;
                 
-                if (!ready) {
+                if (!ready.get()) {
                     checkDeadLock();
                 }
             }
@@ -295,9 +296,7 @@ public class DefaultIoFuture implements IoFuture {
      */
     @Override
     public boolean isDone() {
-        synchronized (lock) {
-            return ready;
-        }
+        return ready.get();
     }
 
     /**
@@ -310,12 +309,12 @@ public class DefaultIoFuture implements IoFuture {
     public boolean setValue(Object newValue) {
         synchronized (lock) {
             // Allowed only once.
-            if (ready) {
+            if (ready.get()) {
                 return false;
             }
 
             result = newValue;
-            ready = true;
+            ready.set(true);
             
             // Now, if we have waiters, notify them that the operation has 
completed
             if (waiters > 0) {
@@ -348,7 +347,7 @@ public class DefaultIoFuture implements IoFuture {
         }
 
         synchronized (lock) {
-            if (ready) {
+            if (ready.get()) {
                 // Shortcut : if the operation has completed, no need to 
                 // add a new listener, we just have to notify it. The existing
                 // listeners have already been notified anyway, when the 
@@ -380,7 +379,7 @@ public class DefaultIoFuture implements IoFuture {
         }
 
         synchronized (lock) {
-            if (!ready) {
+            if (!ready.get()) {
                 if (listener == firstListener) {
                     if ((otherListeners != null) && !otherListeners.isEmpty()) 
{
                         firstListener = otherListeners.remove(0);

Reply via email to