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 2004/12/25 06:25:55 UTC
svn commit: r123314 - in incubator/directory/network/trunk/mina/src: examples/org/apache/mina/examples/echoserver java/org/apache/mina/io java/org/apache/mina/io/datagram java/org/apache/mina/io/socket java/org/apache/mina/protocol java/org/apache/mina/util
Author: trustin
Date: Fri Dec 24 21:25:52 2004
New Revision: 123314
URL: http://svn.apache.org/viewcvs?view=rev&rev=123314
Log:
* Added Session.stateless property to distinguish TCP and UDP
* Read buffers allocated from DatagramAcceptor/Connector are returned to ByteBufferPool. It is little tricky because The point of return is up to which package (I/O or Protocol) user is using. You'll have to look at IoHandlerFilterManager.
* Write buffers are returned to ByteBufferPool when dataWritten or messageSent event is fired. All byte buffers written must be allocated from ByteBufferPool now.
TODO: do we need to constraint this?
Modified:
incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoSession.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/datagram/DatagramSession.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/protocol/ProtocolSession.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/ByteBufferPool.java
incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java
Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java?view=diff&rev=123314&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java&r2=123314
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java (original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java Fri Dec 24 21:25:52 2004
@@ -66,14 +66,12 @@
System.out.println( Thread.currentThread().getName() + ' '
+ session.getRemoteAddress() + ": READ ("
+ wb.remaining() + "B)" );
- session.write( wb, wb );
+ session.write( wb, null );
}
public void dataWritten( IoSession IoSession, Object marker )
{
System.out.println( Thread.currentThread().getName() + ' '
+ IoSession.getRemoteAddress() + ": WRITTEN" );
-
- ByteBufferPool.release( ( ByteBuffer ) marker );
}
}
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoSession.java?view=diff&rev=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoSession.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoSession.java&r2=123314
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoSession.java (original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoSession.java Fri Dec 24 21:25:52 2004
@@ -45,10 +45,10 @@
Object getAttachment();
void setAttachment( Object attachment );
+
+ boolean isStateless();
boolean isConnected();
-
- boolean isClosed();
SessionConfig getConfig();
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=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r2=123314
==============================================================================
--- 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 Fri Dec 24 21:25:52 2004
@@ -319,6 +319,8 @@
writeBufferQueue.pop();
writeMarkerQueue.pop();
}
+
+ ByteBufferPool.release( buf );
session.getFilterManager().fireDataWritten( session, marker );
continue;
}
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=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java&r2=123314
==============================================================================
--- 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 Fri Dec 24 21:25:52 2004
@@ -311,6 +311,7 @@
writeBufferQueue.pop();
writeMarkerQueue.pop();
}
+ ByteBufferPool.release( buf );
session.getFilterManager().fireDataWritten( session, marker );
continue;
}
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramSession.java?view=diff&rev=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramSession.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramSession.java&r2=123314
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramSession.java (original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramSession.java Fri Dec 24 21:25:52 2004
@@ -161,15 +161,15 @@
parent.flushSession( this );
}
-
- public boolean isConnected()
+
+ public boolean isStateless()
{
- return ch.isConnected();
+ return true;
}
- public boolean isClosed()
+ public boolean isConnected()
{
- return !isConnected();
+ return ch.isConnected();
}
public SessionConfig getConfig()
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=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java&r2=123314
==============================================================================
--- 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 Fri Dec 24 21:25:52 2004
@@ -29,6 +29,7 @@
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.SessionConfig;
import org.apache.mina.io.WriteTimeoutException;
+import org.apache.mina.util.ByteBufferPool;
import org.apache.mina.util.Queue;
/**
@@ -375,7 +376,7 @@
if( session == null )
break;
- if( session.isClosed() )
+ if( !session.isConnected() )
continue;
try
@@ -416,7 +417,7 @@
writeBufferQueue.pop();
writeMarkerQueue.pop();
}
-
+ ByteBufferPool.release( buf );
session.getFilterManager().fireDataWritten( session, marker );
continue;
}
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=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java&r2=123314
==============================================================================
--- 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 Fri Dec 24 21:25:52 2004
@@ -172,15 +172,15 @@
SocketIoProcessor.getInstance().flushSession( this );
}
-
- public boolean isConnected()
+
+ public boolean isStateless()
{
- return ch.isConnected();
+ return false;
}
- public boolean isClosed()
+ public boolean isConnected()
{
- return !isConnected();
+ return ch.isConnected();
}
public SessionConfig getConfig()
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=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java&r2=123314
==============================================================================
--- 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 Fri Dec 24 21:25:52 2004
@@ -25,6 +25,7 @@
import org.apache.mina.common.SessionConfig;
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoSession;
+import org.apache.mina.util.ByteBufferPool;
import org.apache.mina.util.ProtocolHandlerFilterManager;
import org.apache.mina.util.Queue;
@@ -36,6 +37,8 @@
*/
public class IoAdapter
{
+ public static final Class IO_HANDLER_TYPE = SessionHandlerAdapter.class;
+
private final ProtocolHandlerFilterManager filterManager = new ProtocolHandlerFilterManager();
public IoAdapter()
@@ -132,6 +135,11 @@
{
filterManager.fireExceptionCaught( psession, t );
}
+
+ if (session.isStateless())
+ {
+ ByteBufferPool.release( in );
+ }
}
public void dataWritten( IoSession session, Object marker )
@@ -256,15 +264,15 @@
adapter.write( session );
return true;
}
-
- public boolean isConnected()
+
+ public boolean isStateless()
{
- return session.isConnected();
+ return session.isStateless();
}
- public boolean isClosed()
+ public boolean isConnected()
{
- return session.isClosed();
+ return session.isConnected();
}
public SessionConfig getConfig()
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java?view=diff&rev=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java&r2=123314
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java (original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java Fri Dec 24 21:25:52 2004
@@ -45,9 +45,9 @@
boolean write( Object message );
- boolean isConnected();
+ boolean isStateless();
- boolean isClosed();
+ boolean isConnected();
SessionConfig getConfig();
Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/ByteBufferPool.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/ByteBufferPool.java?view=diff&rev=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/ByteBufferPool.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/ByteBufferPool.java&r2=123314
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/ByteBufferPool.java (original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/ByteBufferPool.java Fri Dec 24 21:25:52 2004
@@ -69,7 +69,7 @@
buf = (ByteBuffer) stack.pop();
if (buf == null)
{
- buf = ByteBuffer.allocate( bufferStackSizes[ idx ] );
+ buf = ByteBuffer.allocateDirect( bufferStackSizes[ idx ] );
}
}
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=123314&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java&r1=123313&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java&r2=123314
==============================================================================
--- 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 Fri Dec 24 21:25:52 2004
@@ -24,6 +24,7 @@
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoHandlerFilter;
import org.apache.mina.io.IoSession;
+import org.apache.mina.protocol.IoAdapter;
/**
* TODO Document me.
@@ -61,7 +62,11 @@
public void dataRead( IoHandler nextHandler, IoSession session,
ByteBuffer buf )
{
- session.getHandler().dataRead( session, buf );
+ IoHandler handler = session.getHandler();
+ handler.dataRead( session, buf );
+ if (session.isStateless() && !IoAdapter.IO_HANDLER_TYPE.isAssignableFrom( handler.getClass() )) {
+ ByteBufferPool.release( buf );
+ }
}
public void dataWritten( IoHandler nextHandler, IoSession session,