[prev in list] [next in list] [prev in thread] [next in thread]
List: mina-commits
Subject: [4/4] git commit: A fix for DIRMINA-994. The ConnectFuture.cancel() method now return a flag telling
From: elecharny () apache ! org
Date: 2014-11-04 13:22:33
Message-ID: 50aa715e60674160898972a5518e63a6 () git ! apache ! org
[Download RAW message or body]
A fix for DIRMINA-994. The ConnectFuture.cancel() method now return a
flag telling if the cancellation was already done or not. We don't add a
cancelled future into the cancel queue anymore.
Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/f1972fc3
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/f1972fc3
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/f1972fc3
Branch: refs/heads/2.0
Commit: f1972fc3de8c4074ff7b60f8c557d3c53013e30b
Parents: 32945a9
Author: Emmanuel Lécharny <elecharny@symas.com>
Authored: Tue Nov 4 14:22:15 2014 +0100
Committer: Emmanuel Lécharny <elecharny@symas.com>
Committed: Tue Nov 4 14:22:15 2014 +0100
----------------------------------------------------------------------
.../apache/mina/core/future/ConnectFuture.java | 5 ++++-
.../mina/core/future/DefaultConnectFuture.java | 4 ++--
.../mina/core/future/DefaultIoFuture.java | 8 +++++--
.../polling/AbstractPollingIoConnector.java | 22 +++++++++++++++-----
4 files changed, 29 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina/blob/f1972fc3/mina-core/src/main/java/org/apache/mina/core/future/ConnectFuture.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/core/future/ConnectFuture.java \
b/mina-core/src/main/java/org/apache/mina/core/future/ConnectFuture.java index \
2db17c3..a1bc093 100644
--- a/mina-core/src/main/java/org/apache/mina/core/future/ConnectFuture.java
+++ b/mina-core/src/main/java/org/apache/mina/core/future/ConnectFuture.java
@@ -85,8 +85,11 @@ public interface ConnectFuture extends IoFuture {
/**
* Cancels the connection attempt and notifies all threads waiting for
* this future.
+ *
+ * @return {@code true} if the future has been cancelled by this call, {@code \
false} + * if the future was already cancelled.
*/
- void cancel();
+ boolean cancel();
/**
* {@inheritDoc}
http://git-wip-us.apache.org/repos/asf/mina/blob/f1972fc3/mina-core/src/main/java/org/apache/mina/core/future/DefaultConnectFuture.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/core/future/DefaultConnectFuture.java \
b/mina-core/src/main/java/org/apache/mina/core/future/DefaultConnectFuture.java index \
4d283fd..1860f0c 100644
--- a/mina-core/src/main/java/org/apache/mina/core/future/DefaultConnectFuture.java
+++ b/mina-core/src/main/java/org/apache/mina/core/future/DefaultConnectFuture.java
@@ -123,8 +123,8 @@ public class DefaultConnectFuture extends DefaultIoFuture \
implements ConnectFutu /**
* {@inheritDoc}
*/
- public void cancel() {
- setValue(CANCELED);
+ public boolean cancel() {
+ return setValue(CANCELED);
}
/**
http://git-wip-us.apache.org/repos/asf/mina/blob/f1972fc3/mina-core/src/main/java/org/apache/mina/core/future/DefaultIoFuture.java
----------------------------------------------------------------------
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 \
c664aab..fa59906 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
@@ -293,12 +293,14 @@ public class DefaultIoFuture implements IoFuture {
* Sets the result of the asynchronous operation, and mark it as finished.
*
* @param newValue The result to store into the Future
+ * @return {@code true} if the value has been set, {@code false} if
+ * the future already has a value (thus is in ready state)
*/
- public void setValue(Object newValue) {
+ public boolean setValue(Object newValue) {
synchronized (lock) {
// Allowed only once.
if (ready) {
- return;
+ return false;
}
result = newValue;
@@ -312,6 +314,8 @@ public class DefaultIoFuture implements IoFuture {
// Last, not least, inform the listeners
notifyListeners();
+
+ return true;
}
/**
http://git-wip-us.apache.org/repos/asf/mina/blob/f1972fc3/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java \
b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java
index 147ad1e..167e8a5 100644
--- a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java
+++ b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java
@@ -569,20 +569,25 @@ public abstract class AbstractPollingIoConnector<T extends \
AbstractIoSession, H> }
public final class ConnectionRequest extends DefaultConnectFuture {
+ /** The handle associated with this connection request */
private final H handle;
+ /** The time up to this connection request will be valid */
private final long deadline;
+ /** The callback to call when the session is initialized */
private final IoSessionInitializer<? extends ConnectFuture> \
sessionInitializer;
public ConnectionRequest(H handle, IoSessionInitializer<? extends \
ConnectFuture> callback) { this.handle = handle;
long timeout = getConnectTimeoutMillis();
+
if (timeout <= 0L) {
this.deadline = Long.MAX_VALUE;
} else {
this.deadline = System.currentTimeMillis() + timeout;
}
+
this.sessionInitializer = callback;
}
@@ -599,13 +604,20 @@ public abstract class AbstractPollingIoConnector<T extends \
AbstractIoSession, H> }
@Override
- public void cancel() {
+ public boolean cancel() {
if (!isDone()) {
- super.cancel();
- cancelQueue.add(this);
- startupWorker();
- wakeup();
+ boolean justCancelled = super.cancel();
+
+ // We haven't cancelled the request before, so add the future
+ // in the cancel queue.
+ if (justCancelled) {
+ cancelQueue.add(this);
+ startupWorker();
+ wakeup();
+ }
}
+
+ return true;
}
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic