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();