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; }