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: [email protected]
For additional commands, e-mail: [email protected]