Index: modules/grizzly/src/main/java/com/sun/grizzly/streams/AbstractStreamWriter.java =================================================================== --- modules/grizzly/src/main/java/com/sun/grizzly/streams/AbstractStreamWriter.java (revision 3411) +++ modules/grizzly/src/main/java/com/sun/grizzly/streams/AbstractStreamWriter.java Mon Jul 06 17:17:13 CDT 2009 @@ -119,7 +119,6 @@ if (!future.isDone()) { buffer = newBuffer(bufferSize); } - initBuffer(); } else { future = ZERO_READY_FUTURE; if (completionHandler != null) { @@ -128,15 +127,24 @@ } } else { buffer = newBuffer(bufferSize); - initBuffer(); } + initBuffer(); return future; } private void initBuffer() { + if(buffer.capacity() < bufferSize) + { + // Buffer size increased. + buffer.dispose(); + buffer = newBuffer(bufferSize); + } + else + { - buffer.clear(); - } + buffer.clear(); + } + } /** * Cause the overflow handler to be called even if buffer is not full. Index: modules/grizzly/src/main/java/com/sun/grizzly/ssl/SSLStreamWriter.java =================================================================== --- modules/grizzly/src/main/java/com/sun/grizzly/ssl/SSLStreamWriter.java (revision 3411) +++ modules/grizzly/src/main/java/com/sun/grizzly/ssl/SSLStreamWriter.java Mon Jul 06 17:16:12 CDT 2009 @@ -67,14 +67,17 @@ @Override public void setUnderlyingWriter(StreamWriter underlyingWriter) { - super.setUnderlyingWriter(underlyingWriter); - + super.setUnderlyingWriter(underlyingWriter); + - try { - checkBuffers(); - } catch (IOException e) { - throw new IllegalStateException(e); + SSLEngine sslEngine = getSSLEngine(); + + if (sslEngine != null) { + int appBufferSize = sslEngine.getSession().getApplicationBufferSize(); + if (bufferSize < appBufferSize) { + bufferSize = appBufferSize; } - } + } + } public SSLEngine getSSLEngine() { SSLResourcesAccessor resourceAccessor = @@ -90,39 +93,25 @@ completionHandler); } - private void checkBuffers() throws IOException { + @Override + protected Future flush0(Buffer buffer, + CompletionHandler completionHandler) throws IOException { + + Future lastWriterFuture = null; SSLEngine sslEngine = getSSLEngine(); + int underlyingBufferSize = sslEngine.getSession().getPacketBufferSize(); + int appBufferSize = sslEngine.getSession().getApplicationBufferSize(); - if (sslEngine != null) { - if (underlyingWriter != null) { + if (underlyingWriter != null) { - int underlyingBufferSize = sslEngine.getSession().getPacketBufferSize(); - if (underlyingWriter.getBufferSize() < underlyingBufferSize) { - underlyingWriter.setBufferSize(underlyingBufferSize); - } + if (underlyingWriter.getBufferSize() < underlyingBufferSize) { + underlyingWriter.setBufferSize(underlyingBufferSize); + } - - Buffer underlyingBuffer = underlyingWriter.getBuffer(); - if (underlyingBuffer == null || - (underlyingBuffer.remaining() < underlyingBufferSize)) { - underlyingWriter.flush(); - } + } - } - + - int appBufferSize = sslEngine.getSession().getApplicationBufferSize(); - if (bufferSize < appBufferSize) { - bufferSize = appBufferSize; - } + if (bufferSize < appBufferSize) { + bufferSize = appBufferSize; + } - } - } - @Override - protected Future flush0(Buffer buffer, - CompletionHandler completionHandler) throws IOException { - - Future lastWriterFuture = null; - SSLEngine sslEngine = getSSLEngine(); - - checkBuffers(); - if (buffer != null) { buffer.flip(); if (buffer.remaining() > 0 && SSLUtils.isHandshaking(sslEngine)) { @@ -132,6 +121,10 @@ ByteBuffer byteBuffer = (ByteBuffer) buffer.underlying(); do { Buffer underlyingBuffer = underlyingWriter.getBuffer(); + if (underlyingBuffer.remaining() < underlyingBufferSize) { + underlyingWriter.flush(); + underlyingBuffer = underlyingWriter.getBuffer(); + } ByteBuffer underlyingByteBuffer = (ByteBuffer) underlyingBuffer.underlying(); sslEngine.wrap(byteBuffer, underlyingByteBuffer); lastWriterFuture = underlyingWriter.flush();