You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/07/06 13:55:58 UTC

svn commit: r553852 - /mina/trunk/core/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java

Author: trustin
Date: Fri Jul  6 04:55:57 2007
New Revision: 553852

URL: http://svn.apache.org/viewvc?view=rev&rev=553852
Log:
Made sure notifyAll is not invoked when nobody's waiting

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java?view=diff&rev=553852&r1=553851&r2=553852
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java Fri Jul  6 04:55:57 2007
@@ -41,6 +41,7 @@
     private List<IoFutureListener> otherListeners;
     private Object result;
     private boolean ready;
+    private int waiters;
 
     /**
      * Creates a new instance.
@@ -71,7 +72,12 @@
         {
             while( !ready )
             {
-                lock.wait();
+                waiters ++;
+                try {
+                    lock.wait();
+                } finally {
+                    waiters --;
+                }
             }
         }
         return this;
@@ -86,7 +92,12 @@
         {
             if( !ready )
             {
-                lock.wait(timeoutMillis);
+                waiters ++;
+                try {
+                    lock.wait(timeoutMillis);
+                } finally {
+                    waiters --;
+                }
             }
             return ready;
         }
@@ -98,12 +109,15 @@
         {
             while( !ready )
             {
+                waiters ++;
                 try
                 {
                     lock.wait();
                 }
                 catch( InterruptedException e )
                 {
+                } finally {
+                    waiters --;
                 }
             }
         }
@@ -132,26 +146,31 @@
                 return ready;
             }
 
-            for( ;; )
-            {
-                try
+            waiters ++;
+            try {
+                for( ;; )
                 {
-                    lock.wait( waitTime );
-                }
-                catch( InterruptedException e )
-                {
-                }
-
-                if( ready ) {
-                    return true;
-                } else
-                {
-                    waitTime = timeoutMillis - ( System.currentTimeMillis() - startTime );
-                    if( waitTime <= 0 )
+                    try
+                    {
+                        lock.wait( waitTime );
+                    }
+                    catch( InterruptedException e )
                     {
-                        return ready;
+                    }
+    
+                    if( ready ) {
+                        return true;
+                    } else
+                    {
+                        waitTime = timeoutMillis - ( System.currentTimeMillis() - startTime );
+                        if( waitTime <= 0 )
+                        {
+                            return ready;
+                        }
                     }
                 }
+            } finally {
+                waiters --;
             }
         }
     }
@@ -179,7 +198,9 @@
 
             result = newValue;
             ready = true;
-            lock.notifyAll();
+            if (waiters > 0) {
+                lock.notifyAll();
+            }
         }
 
         notifyListeners();