Author: remm Date: Mon Mar 10 21:42:40 2014 New Revision: 1576097 URL: http://svn.apache.org/r1576097 Log: - Closing is not an async operation, but needs to be performed, so ignore errors if some pending things are going on with SSL. - Also fix some warnings.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java?rev=1576097&r1=1576096&r2=1576097&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java Mon Mar 10 21:42:40 2014 @@ -22,6 +22,7 @@ import java.nio.ByteBuffer; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.ClosedChannelException; import java.nio.channels.CompletionHandler; +import java.nio.channels.WritePendingException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -332,7 +333,6 @@ public class SecureNio2Channel extends N /** * Performs the WRAP function - * @param doWrite boolean * @return SSLEngineResult * @throws IOException */ @@ -351,7 +351,6 @@ public class SecureNio2Channel extends N /** * Perform handshake unwrap - * @param doread boolean * @return SSLEngineResult * @throws IOException */ @@ -408,6 +407,8 @@ public class SecureNio2Channel extends N } } catch (InterruptedException | ExecutionException | TimeoutException e) { throw new IOException("Remaining data in the network buffer, can't send SSL close message, force a close with close(true) instead", e); + } catch (WritePendingException e) { + // Ingore } //prep the buffer for the close message netOutBuffer.clear(); @@ -420,7 +421,15 @@ public class SecureNio2Channel extends N //prepare the buffer for writing netOutBuffer.flip(); //if there is data to be written - flush(); + try { + if (!flush().get(endpoint.getSoTimeout(), TimeUnit.MILLISECONDS).booleanValue()) { + throw new IOException("Remaining data in the network buffer, can't send SSL close message, force a close with close(true) instead"); + } + } catch (InterruptedException | ExecutionException | TimeoutException e) { + throw new IOException("Remaining data in the network buffer, can't send SSL close message, force a close with close(true) instead", e); + } catch (WritePendingException e) { + // Ingore + } //is the channel closed? closed = (!netOutBuffer.hasRemaining() && (handshake.getHandshakeStatus() != HandshakeStatus.NEED_WRAP)); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org