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


Reply via email to