Author: trustin
Date: Wed Dec 13 00:36:20 2006
New Revision: 486546
URL: http://svn.apache.org/viewvc?view=rev&rev=486546
Log:
Removed SSL NIO ByteBuffer pooling (DIRMINA-323)
Updated JavaDoc
Added:
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferUtil.java
- copied, changed from r486545,
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferPool.java
Removed:
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferPool.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
mina/trunk/filter-compression/src/main/java/org/apache/mina/filter/support/Zlib.java
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?view=diff&rev=486546&r1=486545&r2=486546
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
Wed Dec 13 00:36:20 2006
@@ -368,16 +368,6 @@
super( EMPTY_BUFFER );
this.message = message;
}
-
- public void acquire()
- {
- // no-op since we are wraping a zero-byte buffer, this instance is
to just curry the message
- }
-
- public void release()
- {
- // no-op since we are wraping a zero-byte buffer, this instance is
to just curry the message
- }
}
private static class ProtocolEncoderOutputImpl extends
SimpleProtocolEncoderOutput
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=486546&r1=486545&r2=486546
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Wed Dec 13 00:36:20 2006
@@ -228,7 +228,7 @@
}
finally
{
- releaseWriteBuffers( session );
+ clearWriteRequestQueue( session );
getServiceListeners( session ).fireSessionDestroyed( session );
}
}
@@ -383,7 +383,7 @@
if( !session.isConnected() )
{
- releaseWriteBuffers( session );
+ clearWriteRequestQueue( session );
continue;
}
@@ -414,7 +414,7 @@
}
}
- private void releaseWriteBuffers( SocketSessionImpl session )
+ private void clearWriteRequestQueue( SocketSessionImpl session )
{
Queue writeRequestQueue = session.getWriteRequestQueue();
WriteRequest req;
Modified:
mina/trunk/filter-compression/src/main/java/org/apache/mina/filter/support/Zlib.java
URL:
http://svn.apache.org/viewvc/mina/trunk/filter-compression/src/main/java/org/apache/mina/filter/support/Zlib.java?view=diff&rev=486546&r1=486545&r2=486546
==============================================================================
---
mina/trunk/filter-compression/src/main/java/org/apache/mina/filter/support/Zlib.java
(original)
+++
mina/trunk/filter-compression/src/main/java/org/apache/mina/filter/support/Zlib.java
Wed Dec 13 00:36:20 2006
@@ -88,8 +88,7 @@
* @param inBuffer the [EMAIL PROTECTED] ByteBuffer} to be decompressed.
The contents
* of the buffer are transferred into a local byte array and the buffer is
* flipped and returned intact.
- * @return the decompressed data. If not passed to the MINA methods that
- * release the buffer automatically, the buffer has to be manually
released
+ * @return the decompressed data
* @throws IOException if the decompression of the data failed for some
reason.
*/
public ByteBuffer inflate( ByteBuffer inBuffer ) throws IOException
@@ -144,9 +143,7 @@
/**
* @param inBuffer the buffer to be compressed. The contents are
transferred
* into a local byte array and the buffer is flipped and returned intact.
- * @return the buffer with the compressed data. If not passed to any of the
- * MINA methods that automatically release the buffer, the buffer has to be
- * released manually.
+ * @return the buffer with the compressed data
* @throws IOException if the compression of teh buffer failed for some
reason
*/
public ByteBuffer deflate( ByteBuffer inBuffer ) throws IOException
Copied:
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferUtil.java
(from r486545,
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferPool.java)
URL:
http://svn.apache.org/viewvc/mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferUtil.java?view=diff&rev=486546&p1=mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferPool.java&r1=486545&p2=mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferUtil.java&r2=486546
==============================================================================
---
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferPool.java
(original)
+++
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLByteBufferUtil.java
Wed Dec 13 00:36:20 2006
@@ -23,8 +23,6 @@
import javax.net.ssl.SSLEngine;
-import org.apache.mina.util.Stack;
-
/**
* Simple ByteBuffer pool used by SSLHandler.
* ByteBuffers are by default allocated as direct byte buffers. To use
non-direct
@@ -33,27 +31,15 @@
* @author The Apache Directory Project ([email protected])
* @version $Rev$, $Date$
*/
-class SSLByteBufferPool
+class SSLByteBufferUtil
{
private static final int PACKET_BUFFER_INDEX = 0;
-
private static final int APPLICATION_BUFFER_INDEX = 1;
private static boolean initiated = false;
-
- private static final String DIRECT_MEMORY_PROP =
"mina.sslfilter.directbuffer";
-
- private static boolean useDirectAllocatedBuffers = true;
-
private static int packetBufferSize;
-
private static int appBufferSize;
- private static int[] bufferStackSizes;
-
- private static final Stack[] bufferStacks = new Stack[] { new Stack(),
- new Stack(), };
-
/**
* Initiate buffer pool and buffer sizes from SSLEngine session.
*
@@ -63,14 +49,6 @@
{
if( !initiated )
{
- // Use direct allocated memory or not?
- String prop = System.getProperty( DIRECT_MEMORY_PROP );
- if( prop != null )
- {
- useDirectAllocatedBuffers = Boolean
- .getBoolean( DIRECT_MEMORY_PROP );
- }
-
// init buffer sizes from SSLEngine
packetBufferSize = sslEngine.getSession().getPacketBufferSize();
@@ -78,7 +56,6 @@
// returns BUFFER_OVERFLOW even if there is enough room for the
buffer.
// So for now we use a size double the packet size as a workaround.
appBufferSize = packetBufferSize * 2;
- initiateBufferStacks();
initiated = true;
}
}
@@ -114,36 +91,14 @@
*/
private static ByteBuffer allocate( int idx )
{
- Stack stack = bufferStacks[ idx ];
-
- ByteBuffer buf;
- synchronized( stack )
+ switch( idx )
{
- buf = ( ByteBuffer ) stack.pop();
- if( buf == null )
- {
- buf = createBuffer( bufferStackSizes[ idx ] );
- }
- }
-
- buf.clear();
- return buf;
- }
-
- /**
- * Releases the specified buffer to buffer pool.
- */
- public static void release( ByteBuffer buf )
- {
- // Sweep buffer for security.
- org.apache.mina.common.ByteBuffer.wrap( buf ).sweep();
-
- int stackIndex =getBufferStackIndex( buf.capacity() );
- if ( stackIndex >= PACKET_BUFFER_INDEX ) {
- Stack stack = bufferStacks[getBufferStackIndex( buf.capacity() )];
- synchronized ( stack ) {
- stack.push( buf );
- }
+ case PACKET_BUFFER_INDEX:
+ return createBuffer( packetBufferSize );
+ case APPLICATION_BUFFER_INDEX:
+ return createBuffer( appBufferSize );
+ default:
+ throw new IllegalStateException();
}
}
@@ -157,29 +112,12 @@
ByteBuffer newBuf = createBuffer( newCapacity );
buf.flip();
newBuf.put( buf );
- release(buf);
return newBuf;
}
- private static void initiateBufferStacks()
- {
- bufferStackSizes = new int[ 2 ];
- bufferStackSizes[ PACKET_BUFFER_INDEX ] = packetBufferSize;
- bufferStackSizes[ APPLICATION_BUFFER_INDEX ] = appBufferSize;
- }
-
- private static int getBufferStackIndex( int size )
- {
- if( size == packetBufferSize )
- return PACKET_BUFFER_INDEX;
- if( size == appBufferSize )
- return APPLICATION_BUFFER_INDEX;
- return -1; // not reused
- }
-
private static ByteBuffer createBuffer( int capacity )
{
- if( useDirectAllocatedBuffers )
+ if( org.apache.mina.common.ByteBuffer.isPreferDirectBuffers() )
{
try
{
@@ -187,12 +125,20 @@
}
catch( OutOfMemoryError e )
{
- useDirectAllocatedBuffers = false;
- System.err
- .println( "OutOfMemoryError: No more direct buffers
available; trying heap buffer instead" );
+ return ByteBuffer.allocate( capacity );
+ }
+ }
+ else
+ {
+ try
+ {
+ return ByteBuffer.allocate( capacity );
+ }
+ catch( OutOfMemoryError e )
+ {
+ return ByteBuffer.allocateDirect( capacity );
}
}
- return ByteBuffer.allocate( capacity );
}
}
Modified:
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
URL:
http://svn.apache.org/viewvc/mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java?view=diff&rev=486546&r1=486545&r2=486546
==============================================================================
---
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
(original)
+++
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
Wed Dec 13 00:36:20 2006
@@ -138,12 +138,12 @@
initialHandshakeStatus =
sslEngine.getHandshakeStatus();//SSLEngineResult.HandshakeStatus.NEED_UNWRAP;
initialHandshakeComplete = false;
- SSLByteBufferPool.initiate( sslEngine );
+ SSLByteBufferUtil.initiate( sslEngine );
- appBuffer = SSLByteBufferPool.getApplicationBuffer();
+ appBuffer = SSLByteBufferUtil.getApplicationBuffer();
- inNetBuffer = SSLByteBufferPool.getPacketBuffer();
- outNetBuffer = SSLByteBufferPool.getPacketBuffer();
+ inNetBuffer = SSLByteBufferUtil.getPacketBuffer();
+ outNetBuffer = SSLByteBufferUtil.getPacketBuffer();
outNetBuffer.position( 0 );
outNetBuffer.limit( 0 );
@@ -190,10 +190,6 @@
}
sslEngine.closeOutbound();
sslEngine = null;
-
- SSLByteBufferPool.release( appBuffer );
- SSLByteBufferPool.release( inNetBuffer );
- SSLByteBufferPool.release( outNetBuffer );
scheduledWrites.clear();
}
@@ -272,10 +268,10 @@
{
if ( buf.limit() > inNetBuffer.remaining() ) {
// We have to expand inNetBuffer
- inNetBuffer = SSLByteBufferPool.expandBuffer( inNetBuffer,
+ inNetBuffer = SSLByteBufferUtil.expandBuffer( inNetBuffer,
inNetBuffer.capacity() + ( buf.limit() * 2 ) );
// We also expand app. buffer (twice the size of in net. buffer)
- appBuffer = SSLByteBufferPool.expandBuffer( appBuffer,
inNetBuffer.capacity() * 2);
+ appBuffer = SSLByteBufferUtil.expandBuffer( appBuffer,
inNetBuffer.capacity() * 2);
appBuffer.position( 0 );
appBuffer.limit( 0 );
if( SessionLog.isDebugEnabled( session ) )
@@ -352,7 +348,7 @@
// We have to expand outNetBuffer
// Note: there is no way to know the exact size required, but
enrypted data
// shouln't need to be larger than twice the source data size?
- outNetBuffer = SSLByteBufferPool.expandBuffer( outNetBuffer,
src.capacity() * 2 );
+ outNetBuffer = SSLByteBufferUtil.expandBuffer( outNetBuffer,
src.capacity() * 2 );
if ( SessionLog.isDebugEnabled( session ) ) {
SessionLog.debug( session, " expanded outNetBuffer:" +
outNetBuffer );
}