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/09/17 02:38:58 UTC
svn commit: r576226 - in /mina/trunk/core/src/main/java/org/apache/mina:
common/ transport/socket/nio/
Author: trustin
Date: Sun Sep 16 17:38:57 2007
New Revision: 576226
URL: http://svn.apache.org/viewvc?rev=576226&view=rev
Log:
* Moved a call to buildFilterChain to AbstractIoProcessor
* Better exception handling
Modified:
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnector.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NIOProcessor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java?rev=576226&r1=576225&r2=576226&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java Sun Sep 16 17:38:57 2007
@@ -143,17 +143,34 @@
break;
}
+ boolean notified = false;
try {
doAdd(session);
addedSessions ++;
+ // Build the filter chain of this session.
+ session.getService().getFilterChainBuilder().buildFilterChain(
+ session.getFilterChain());
+
// DefaultIoFilterChain.CONNECT_FUTURE is cleared inside here
// in AbstractIoFilterChain.fireSessionOpened().
((AbstractIoService) session.getService()).getListeners().fireSessionCreated(session);
+ notified = true;
} catch (Exception e) {
- // Clear the DefaultIoFilterChain.CONNECT_FUTURE attribute
- // and call ConnectFuture.setException().
- session.getFilterChain().fireExceptionCaught(session, e);
+ if (notified) {
+ // Clear the DefaultIoFilterChain.CONNECT_FUTURE attribute
+ // and call ConnectFuture.setException().
+ session.getFilterChain().fireExceptionCaught(session, e);
+ scheduleRemove(session);
+ wakeup();
+ } else {
+ ExceptionMonitor.getInstance().exceptionCaught(e);
+ try {
+ doRemove(session);
+ } catch (Exception e1) {
+ ExceptionMonitor.getInstance().exceptionCaught(e1);
+ }
+ }
}
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java?rev=576226&r1=576225&r2=576226&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java Sun Sep 16 17:38:57 2007
@@ -213,7 +213,7 @@
}
try {
- buildFilterChain(session);
+ this.getFilterChainBuilder().buildFilterChain(session.getFilterChain());
getListeners().fireSessionCreated(session);
} catch (Throwable t) {
ExceptionMonitor.getInstance().exceptionCaught(t);
@@ -277,10 +277,6 @@
public void updateTrafficMask(IoSession session) {
}
- }
-
- private void buildFilterChain(IoSession session) throws Exception {
- this.getFilterChainBuilder().buildFilterChain(session.getFilterChain());
}
private synchronized void startupWorker() {
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnector.java?rev=576226&r1=576225&r2=576226&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnector.java Sun Sep 16 17:38:57 2007
@@ -98,7 +98,6 @@
ch.connect(remoteAddress);
session = new DatagramSessionImpl(this, ch, getHandler());
- getFilterChainBuilder().buildFilterChain(session.getFilterChain());
ConnectFuture future = new DefaultConnectFuture();
// DefaultIoFilterChain will notify the connect future.
session.setAttribute(DefaultIoFilterChain.CONNECT_FUTURE, future);
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NIOProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NIOProcessor.java?rev=576226&r1=576225&r2=576226&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NIOProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NIOProcessor.java Sun Sep 16 17:38:57 2007
@@ -98,7 +98,9 @@
protected void doRemove(IoSession session) throws Exception {
ByteChannel ch = getChannel(session);
SelectionKey key = getSelectionKey(session);
- key.cancel();
+ if (key != null) {
+ key.cancel();
+ }
ch.close();
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java?rev=576226&r1=576225&r2=576226&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java Sun Sep 16 17:38:57 2007
@@ -415,10 +415,6 @@
SocketSessionImpl session = new SocketSessionImpl(
SocketAcceptor.this, nextProcessor(), ch);
- // build the list of filters for this session.
- getFilterChainBuilder().buildFilterChain(
- session.getFilterChain());
-
// add the session to the SocketIoProcessor
session.getProcessor().add(session);
success = true;
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java?rev=576226&r1=576225&r2=576226&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java Sun Sep 16 17:38:57 2007
@@ -274,17 +274,9 @@
}
}
- private void newSession(SocketChannel ch, ConnectFuture connectFuture)
- throws IOException {
+ private void newSession(SocketChannel ch, ConnectFuture connectFuture) {
SocketSessionImpl session = new SocketSessionImpl(this,
nextProcessor(), ch);
-
- try {
- getFilterChainBuilder().buildFilterChain(session.getFilterChain());
- } catch (Throwable e) {
- throw (IOException) new IOException("Failed to create a session.")
- .initCause(e);
- }
// Set the ConnectFuture of the specified session, which will be
// removed and notified by AbstractIoFilterChain eventually.