Author: trustin
Date: Sat Dec 25 00:01:17 2004
New Revision: 123329
URL: http://svn.apache.org/viewcvs?view=rev&rev=123329
Log:
* Removed synchronization in SocketIoProcessor by reallocating ByteBuffer
* DatagramAcceptor/Connector passes more compact buffers to less memory consumption
Modified:
incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java?view=diff&rev=123329&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java&r1=123328&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java&r2=123329
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java
(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java
Sat Dec 25 00:01:17 2004
@@ -23,6 +23,9 @@
* @version $Rev$, $Date$,
*/
public final class ByteBuffer {
+
+ public static final int MAXIMUM_CAPACITY = 8192;
+
private static final int[] bufferStackSizes = new int[] {
16,
32,
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java?view=diff&rev=123329&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r1=123328&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r2=123329
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
Sat Dec 25 00:01:17 2004
@@ -253,13 +253,22 @@
{
readBuf.flip();
session.setRemoteAddress( remoteAddress );
- filterManager.fireDataRead( session, readBuf );
+
+ ByteBuffer newBuf = ByteBuffer.allocate(readBuf.limit());
+ newBuf.put(readBuf);
+ newBuf.flip();
+
+ filterManager.fireDataRead( session, newBuf );
}
}
catch( IOException e )
{
filterManager.fireExceptionCaught( session, e );
}
+ finally
+ {
+ ByteBuffer.release(readBuf);
+ }
}
private void flushSessions()
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java?view=diff&rev=123329&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java&r1=123328&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java&r2=123329
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java
(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java
Sat Dec 25 00:01:17 2004
@@ -245,13 +245,21 @@
if( readBytes > 0 )
{
readBuf.flip();
- filterManager.fireDataRead( session, readBuf );
+ ByteBuffer newBuf = ByteBuffer.allocate(readBuf.limit());
+ newBuf.put(readBuf);
+ newBuf.flip();
+
+ filterManager.fireDataRead( session, newBuf );
}
}
catch( IOException e )
{
filterManager.fireExceptionCaught( session, e );
}
+ finally
+ {
+ ByteBuffer.release( readBuf );
+ }
}
private void flushSessions()
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java?view=diff&rev=123329&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java&r1=123328&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java&r2=123329
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
Sat Dec 25 00:01:17 2004
@@ -234,42 +234,35 @@
int readBytes = 0;
int ret;
- synchronized( buf )
- {
- if( buf.hasRemaining() )
- buf.compact();
- else
- buf.clear();
+ buf.clear();
- try
- {
- while( ( ret = ch.read( buf.buf() ) ) > 0 )
- {
- readBytes += ret;
- }
- }
- finally
+ try
+ {
+ while( ( ret = ch.read( buf.buf() ) ) > 0 )
{
- buf.flip();
+ readBytes += ret;
}
+ }
+ finally
+ {
+ buf.flip();
+ }
- session.increaseReadBytes( readBytes );
+ session.increaseReadBytes( readBytes );
- if( ret >= 0 )
- {
- if( readBytes > 0 )
- {
- session.getFilterManager().fireDataRead( session, buf );
- }
- else
- {
- // FIXME will spin in multi-threaded env.
- }
- }
- else
+ if( ret >= 0 )
+ {
+ if( readBytes > 0 )
{
- scheduleRemove( session );
+ ByteBuffer newBuf = ByteBuffer.allocate( readBytes );
+ newBuf.put(buf);
+ newBuf.flip();
+ session.getFilterManager().fireDataRead( session, newBuf );
}
+ }
+ else
+ {
+ scheduleRemove( session );
}
}
catch( Throwable e )
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java?view=diff&rev=123329&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java&r1=123328&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java&r2=123329
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java
(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java
Sat Dec 25 00:01:17 2004
@@ -83,7 +83,7 @@
this.filterManager = filterManager;
this.ch = ch;
this.config = new SocketSessionConfig( ch );
- this.readBuf = ByteBuffer.allocate( 4096 ).limit( 0 );
+ this.readBuf = ByteBuffer.allocate( ByteBuffer.MAXIMUM_CAPACITY ).limit( 0 );
this.writeBufferQueue = new Queue();
this.writeMarkerQueue = new Queue();
this.handler = defaultHandler;
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java?view=diff&rev=123329&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java&r1=123328&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java&r2=123329
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java
(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java
Sat Dec 25 00:01:17 2004
@@ -134,11 +134,10 @@
{
filterManager.fireExceptionCaught( psession, t );
}
-
- if (session.isStateless())
- {
- ByteBuffer.release( in );
- }
+ finally
+ {
+ ByteBuffer.release( in );
+ }
}
public void dataWritten( IoSession session, Object marker )
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java?view=diff&rev=123329&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java&r1=123328&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java&r2=123329
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java
(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java
Sat Dec 25 00:01:17 2004
@@ -63,7 +63,7 @@
{
IoHandler handler = session.getHandler();
handler.dataRead( session, buf );
- if (session.isStateless() && !IoAdapter.IO_HANDLER_TYPE.isAssignableFrom(
handler.getClass() )) {
+ if (!IoAdapter.IO_HANDLER_TYPE.isAssignableFrom( handler.getClass() )) {
ByteBuffer.release( buf );
}
}
|