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 2016/02/02 16:48:39 UTC
mina git commit: o Added the isActive(),
closeNoew() and closeOnFlush() methods in the IoSession interface o
Remaped the close() methods in AbstractIoSession to the newly added methods,
and deprecated the old ones o Fixed the disposal of sessions by chec
Repository: mina
Updated Branches:
refs/heads/2.0 7ffbe3efb -> 77e29bb84
o Added the isActive(), closeNoew() and closeOnFlush() methods in the
IoSession interface
o Remaped the close() methods in AbstractIoSession to the newly added
methods, and deprecated the old ones
o Fixed the disposal of sessions by checking that the session is active
before removing it (otherwise it may be removed twice). That fixes
DIRMINA-1026
Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/77e29bb8
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/77e29bb8
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/77e29bb8
Branch: refs/heads/2.0
Commit: 77e29bb84e0ca6c6e9bafb4ad0ccb506f6ca4716
Parents: 7ffbe3e
Author: Emmanuel Lécharny <el...@symas.com>
Authored: Tue Feb 2 16:48:13 2016 +0100
Committer: Emmanuel Lécharny <el...@symas.com>
Committed: Tue Feb 2 16:48:13 2016 +0100
----------------------------------------------------------------------
.../polling/AbstractPollingIoProcessor.java | 8 ++-
.../mina/core/session/AbstractIoSession.java | 61 ++++++++++++--------
.../org/apache/mina/core/session/IoSession.java | 21 +++++++
.../mina/transport/socket/nio/NioSession.java | 7 +++
4 files changed, 72 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina/blob/77e29bb8/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
index abd7045..0bf8979 100644
--- a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
+++ b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
@@ -1135,8 +1135,12 @@ public abstract class AbstractPollingIoProcessor<S extends AbstractIoSession> im
boolean hasKeys = false;
for (Iterator<S> i = allSessions(); i.hasNext();) {
- scheduleRemove(i.next());
- hasKeys = true;
+ IoSession session = i.next();
+
+ if (session.isActive()) {
+ scheduleRemove(i.next());
+ hasKeys = true;
+ }
}
if (hasKeys) {
http://git-wip-us.apache.org/repos/asf/mina/blob/77e29bb8/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java b/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
index 7f46810..7186fba 100644
--- a/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
+++ b/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
@@ -227,6 +227,14 @@ public abstract class AbstractIoSession implements IoSession {
/**
* {@inheritDoc}
*/
+ public boolean isActive() {
+ // Return true by default
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public final boolean isClosing() {
return closing || closeFuture.isClosed();
}
@@ -294,22 +302,32 @@ public abstract class AbstractIoSession implements IoSession {
* {@inheritDoc}
*/
public final CloseFuture close(boolean rightNow) {
- if (!isClosing()) {
- if (rightNow) {
- synchronized (lock) {
- if (isClosing()) {
- return closeFuture;
- }
-
- closing = true;
- }
-
- getFilterChain().fireFilterClose();
+ if (rightNow) {
+ return closeNow();
+ } else {
+ return closeOnFlush();
+ }
+ }
- return closeFuture;
- }
+ /**
+ * {@inheritDoc}
+ */
+ public final CloseFuture close() {
+ try {
+ closeNow();
+ } finally {
+ return closeFuture;
+ }
+ }
- return closeOnFlush();
+ /**
+ * {@inheritDoc}
+ */
+ public final CloseFuture closeOnFlush() {
+ if (!isClosing()) {
+ getWriteRequestQueue().offer(this, CLOSE_REQUEST);
+ getProcessor().flush(this);
+ return closeFuture;
} else {
return closeFuture;
}
@@ -318,7 +336,7 @@ public abstract class AbstractIoSession implements IoSession {
/**
* {@inheritDoc}
*/
- public final CloseFuture close() {
+ public final CloseFuture closeNow() {
synchronized (lock) {
if (isClosing()) {
return closeFuture;
@@ -328,12 +346,7 @@ public abstract class AbstractIoSession implements IoSession {
}
getFilterChain().fireFilterClose();
- return closeFuture;
- }
- private CloseFuture closeOnFlush() {
- getWriteRequestQueue().offer(this, CLOSE_REQUEST);
- getProcessor().flush(this);
return closeFuture;
}
@@ -1329,10 +1342,12 @@ public abstract class AbstractIoSession implements IoSession {
* @param currentTime the current time (i.e. {@link System#currentTimeMillis()})
*/
public static void notifyIdleness(Iterator<? extends IoSession> sessions, long currentTime) {
- IoSession s = null;
while (sessions.hasNext()) {
- s = sessions.next();
- notifyIdleSession(s, currentTime);
+ IoSession session = sessions.next();
+
+ if (!session.getCloseFuture().isClosed()) {
+ notifyIdleSession(session, currentTime);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/mina/blob/77e29bb8/mina-core/src/main/java/org/apache/mina/core/session/IoSession.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/core/session/IoSession.java b/mina-core/src/main/java/org/apache/mina/core/session/IoSession.java
index b3eb8a5..2e712ee 100644
--- a/mina-core/src/main/java/org/apache/mina/core/session/IoSession.java
+++ b/mina-core/src/main/java/org/apache/mina/core/session/IoSession.java
@@ -178,10 +178,26 @@ public interface IoSession {
* {@code false} to close this session after all queued
* write requests are flushed.
* @return The associated CloseFuture
+ * @deprecated Use either the closeNow() or the flushAndClose() methods
*/
CloseFuture close(boolean immediately);
/**
+ * Closes this session immediately. This operation is asynchronous, it
+ * returns a {@link CloseFuture}.
+ */
+ CloseFuture closeNow();
+
+ /**
+ * Closes this session after all queued write requests are flushed. This operation
+ * is asynchronous. Wait for the returned {@link CloseFuture} if you want to wait
+ * for the session actually closed.
+ *
+ * @return The associated CloseFuture
+ */
+ CloseFuture closeOnFlush();
+
+ /**
* Closes this session after all queued write requests
* are flushed. This operation is asynchronous. Wait for the returned
* {@link CloseFuture} if you want to wait for the session actually closed.
@@ -363,6 +379,11 @@ public interface IoSession {
* @return <tt>true</tt> if this session is connected with remote peer.
*/
boolean isConnected();
+
+ /**
+ * @return <tt>true</tt> if this session is active.
+ */
+ boolean isActive();
/**
* @return <tt>true</tt> if and only if this session is being closed
http://git-wip-us.apache.org/repos/asf/mina/blob/77e29bb8/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java b/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java
index cddf4bc..bc80d9c 100644
--- a/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java
+++ b/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java
@@ -96,4 +96,11 @@ public abstract class NioSession extends AbstractIoSession {
public IoProcessor<NioSession> getProcessor() {
return processor;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean isActive() {
+ return key.isValid();
+ }
}