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 2008/10/21 13:42:56 UTC

svn commit: r706585 - in /mina/trunk/core/src/main/java/org/apache/mina: core/polling/AbstractPollingIoConnector.java transport/socket/nio/NioDatagramAcceptor.java transport/socket/nio/NioSocketAcceptor.java transport/socket/nio/NioSocketConnector.java

Author: elecharny
Date: Tue Oct 21 04:42:56 2008
New Revision: 706585

URL: http://svn.apache.org/viewvc?rev=706585&view=rev
Log:
Fixed a potential NPE when the SelectionKey is null in the accept methods.

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java?rev=706585&r1=706584&r2=706585&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java Tue Oct 21 04:42:56 2008
@@ -451,7 +451,7 @@
             H handle = handles.next();
             ConnectionRequest connectionRequest = getConnectionRequest(handle);
 
-            if (currentTime >= connectionRequest.deadline) {
+            if ((connectionRequest != null) && (currentTime >= connectionRequest.deadline)) {
                 connectionRequest.setException(
                         new ConnectException("Connection timed out."));
                 cancelQueue.offer(connectionRequest);

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java?rev=706585&r1=706584&r2=706585&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java Tue Oct 21 04:42:56 2008
@@ -121,24 +121,22 @@
     @Override
     protected boolean isReadable(DatagramChannel handle) {
         SelectionKey key = handle.keyFor(selector);
-        if (key == null) {
-            return false;
-        }
-        if (!key.isValid()) {
+
+        if ((key == null) || (!key.isValid())) {
             return false;
         }
+
         return key.isReadable();
     }
 
     @Override
     protected boolean isWritable(DatagramChannel handle) {
         SelectionKey key = handle.keyFor(selector);
-        if (key == null) {
-            return false;
-        }
-        if (!key.isValid()) {
+
+        if ((key == null) || (!key.isValid())) {
             return false;
         }
+
         return key.isWritable();
     }
 
@@ -153,9 +151,11 @@
             IoProcessor<NioSession> processor, DatagramChannel handle,
             SocketAddress remoteAddress) {
         SelectionKey key = handle.keyFor(selector);
-        if (key == null) {
+        
+        if ((key == null) || (!key.isValid())) {
             return null;
         }
+        
         NioDatagramSession newSession = new NioDatagramSession(
                 this, handle, processor, remoteAddress);
         newSession.setSelectionKey(key);
@@ -204,9 +204,11 @@
     @Override
     protected void close(DatagramChannel handle) throws Exception {
         SelectionKey key = handle.keyFor(selector);
+
         if (key != null) {
             key.cancel();
         }
+        
         handle.disconnect();
         handle.close();
     }

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java?rev=706585&r1=706584&r2=706585&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java Tue Oct 21 04:42:56 2008
@@ -210,11 +210,7 @@
 
         SelectionKey key = handle.keyFor(selector);
         
-        if (!key.isValid()) {
-            return null;
-        }
-
-        if (!key.isAcceptable()) {
+        if ((key == null) || (!key.isValid()) || (!key.isAcceptable()) ) {
             return null;
         }
 
@@ -296,9 +292,11 @@
     @Override
     protected void close(ServerSocketChannel handle) throws Exception {
         SelectionKey key = handle.keyFor(selector);
+        
         if (key != null) {
             key.cancel();
         }
+        
         handle.close();
     }
 

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java?rev=706585&r1=706584&r2=706585&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java Tue Oct 21 04:42:56 2008
@@ -194,7 +194,8 @@
     @Override
     protected ConnectionRequest getConnectionRequest(SocketChannel handle) {
         SelectionKey key = handle.keyFor(selector);
-        if (key == null) {
+        
+        if ((key == null) || (!key.isValid())) { 
             return null;
         }
 
@@ -207,9 +208,11 @@
     @Override
     protected void close(SocketChannel handle) throws Exception {
         SelectionKey key = handle.keyFor(selector);
+        
         if (key != null) {
             key.cancel();
         }
+        
         handle.close();
     }
 
@@ -218,11 +221,13 @@
      */
     @Override
     protected boolean finishConnect(SocketChannel handle) throws Exception {
-        SelectionKey key = handle.keyFor(selector);
         if (handle.finishConnect()) {
+            SelectionKey key = handle.keyFor(selector);
+
             if (key != null) {
                 key.cancel();
             }
+            
             return true;
         }