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.