You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2014/11/04 14:22:33 UTC
[4/4] git commit: 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.
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 <el...@symas.com>
Authored: Tue Nov 4 14:22:15 2014 +0100
Committer: Emmanuel Lécharny <el...@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;
}
}
}