You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/03/24 06:59:06 UTC

svn commit: r158883 - directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java

Author: trustin
Date: Wed Mar 23 21:59:05 2005
New Revision: 158883

URL: http://svn.apache.org/viewcvs?view=rev&rev=158883
Log:
* Reduced default size of socket session read buffer to 1024.
* Added SocketSessionConfig.sessionReceiveBufferSize property to let users adjust default read buffer size.

Modified:
    directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
    directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java
    directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java

Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java?view=diff&r1=158882&r2=158883
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java Wed Mar 23 21:59:05 2005
@@ -235,6 +235,9 @@
         ByteBuffer buf = session.getReadBuffer();
         SocketChannel ch = session.getChannel();
 
+        // Acquire buffer to prevent buffer is released by
+        // SocketSession.setReadBuffer()
+        buf.acquire(); 
         try
         {
             int readBytes = 0;
@@ -277,6 +280,10 @@
             if( e instanceof IOException )
                 scheduleRemove( session );
             session.getFilters().exceptionCaught( null, session, e );
+        }
+        finally
+        {
+            buf.release();
         }
     }
 

Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java?view=diff&r1=158882&r2=158883
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java Wed Mar 23 21:59:05 2005
@@ -39,7 +39,7 @@
  */
 class SocketSession implements IoSession
 {
-    private static final int READ_BUFFER_SIZE = 8192;
+    private static final int DEFAULT_READ_BUFFER_SIZE = 1024;
 
     private final IoHandlerFilterChain filters;
 
@@ -47,7 +47,7 @@
 
     private final SocketSessionConfig config;
 
-    private final ByteBuffer readBuf;
+    private ByteBuffer readBuf;
 
     private final Queue writeBufferQueue;
 
@@ -83,12 +83,12 @@
      * Creates a new instance.
      */
     SocketSession( IoHandlerFilterChain filters, SocketChannel ch,
-                  IoHandler defaultHandler )
+                   IoHandler defaultHandler )
     {
         this.filters = filters;
         this.ch = ch;
-        this.config = new SocketSessionConfig( ch );
-        this.readBuf = ByteBuffer.allocate( READ_BUFFER_SIZE ).limit( 0 );
+        this.config = new SocketSessionConfig( this );
+        this.readBuf = ByteBuffer.allocate( DEFAULT_READ_BUFFER_SIZE ).limit( 0 );
         this.writeBufferQueue = new Queue();
         this.writeMarkerQueue = new Queue();
         this.handler = defaultHandler;
@@ -149,6 +149,12 @@
     ByteBuffer getReadBuffer()
     {
         return readBuf;
+    }
+    
+    synchronized void setReadBuffer( ByteBuffer readBuf )
+    {
+        this.readBuf.release(); // release old buffer
+        this.readBuf = readBuf;
     }
 
     Queue getWriteBufferQueue()

Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java?view=diff&r1=158882&r2=158883
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java Wed Mar 23 21:59:05 2005
@@ -19,8 +19,8 @@
 package org.apache.mina.io.socket;
 
 import java.net.SocketException;
-import java.nio.channels.SocketChannel;
 
+import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.SessionConfig;
 import org.apache.mina.util.BasicSessionConfig;
 
@@ -32,90 +32,100 @@
  */
 public class SocketSessionConfig extends BasicSessionConfig
 {
-    private final SocketChannel ch;
+    private final SocketSession session;
 
-    SocketSessionConfig( SocketChannel ch )
+    SocketSessionConfig( SocketSession session )
     {
-        this.ch = ch;
+        this.session = session;
     }
 
     public boolean getKeepAlive() throws SocketException
     {
-        return ch.socket().getKeepAlive();
+        return session.getChannel().socket().getKeepAlive();
     }
 
     public void setKeepAlive( boolean on ) throws SocketException
     {
-        ch.socket().setKeepAlive( on );
+        session.getChannel().socket().setKeepAlive( on );
     }
 
     public boolean getOOBInline() throws SocketException
     {
-        return ch.socket().getOOBInline();
+        return session.getChannel().socket().getOOBInline();
     }
 
     public void setOOBInline( boolean on ) throws SocketException
     {
-        ch.socket().setOOBInline( on );
+        session.getChannel().socket().setOOBInline( on );
     }
 
     public boolean getReuseAddress() throws SocketException
     {
-        return ch.socket().getReuseAddress();
+        return session.getChannel().socket().getReuseAddress();
     }
 
     public void setReuseAddress( boolean on ) throws SocketException
     {
-        ch.socket().setReuseAddress( on );
+        session.getChannel().socket().setReuseAddress( on );
     }
 
     public int getSoLinger() throws SocketException
     {
-        return ch.socket().getSoLinger();
+        return session.getChannel().socket().getSoLinger();
     }
 
     public void setSoLinger( boolean on, int linger ) throws SocketException
     {
-        ch.socket().setSoLinger( on, linger );
+        session.getChannel().socket().setSoLinger( on, linger );
     }
 
     public boolean getTcpNoDelay() throws SocketException
     {
-        return ch.socket().getTcpNoDelay();
+        return session.getChannel().socket().getTcpNoDelay();
     }
 
     public void setTcpNoDelay( boolean on ) throws SocketException
     {
-        ch.socket().setTcpNoDelay( on );
+        session.getChannel().socket().setTcpNoDelay( on );
     }
 
     public int getTrafficClass() throws SocketException
     {
-        return ch.socket().getTrafficClass();
+        return session.getChannel().socket().getTrafficClass();
     }
 
     public void setTrafficClass( int tc ) throws SocketException
     {
-        ch.socket().setTrafficClass( tc );
+        session.getChannel().socket().setTrafficClass( tc );
     }
 
     public int getSendBufferSize() throws SocketException
     {
-        return ch.socket().getSendBufferSize();
+        return session.getChannel().socket().getSendBufferSize();
     }
 
     public void setSendBufferSize( int size ) throws SocketException
     {
-        ch.socket().setSendBufferSize( size );
+        session.getChannel().socket().setSendBufferSize( size );
     }
 
     public int getReceiveBufferSize() throws SocketException
     {
-        return ch.socket().getReceiveBufferSize();
+        return session.getChannel().socket().getReceiveBufferSize();
     }
 
     public void setReceiveBufferSize( int size ) throws SocketException
     {
-        ch.socket().setReceiveBufferSize( size );
+        session.getChannel().socket().setReceiveBufferSize( size );
+    }
+    
+    public void getSessionReceiveBufferSize()
+    {
+        session.getReadBuffer().capacity();
+    }
+    
+    public void setSessionReceiveBufferSize( int size )
+    {
+        session.setReadBuffer( ByteBuffer.allocate( size ).limit( 0 ) );
     }
 }