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/10/17 17:56:34 UTC
svn commit: r325917 -
/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
Author: trustin
Date: Mon Oct 17 08:56:31 2005
New Revision: 325917
URL: http://svn.apache.org/viewcvs?rev=325917&view=rev
Log:
Resolved issue: DIRMINA-90 - Provide a way to release resources for ProtocolEncoder and ProtocolDecoder
* Now all encoders and decoders are disposed whenever one message is encoded or decoded in stateless transport types.
Modified:
directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=325917&r1=325916&r2=325917&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Mon Oct 17 08:56:31 2005
@@ -58,9 +58,15 @@
}
finally
{
+ // Dispose the decoder if this session is stateless.
+ if( session.getTransportType().isStateless() )
+ {
+ disposeDecoder( session );
+ }
+
// Release the read buffer.
in.release();
-
+
Queue queue = decoderOut.getMessageQueue();
synchronized( queue )
{
@@ -112,6 +118,14 @@
}
throw pee;
}
+ finally
+ {
+ // Dispose the encoder if this session is stateless.
+ if( session.getTransportType().isStateless() )
+ {
+ disposeEncoder( session );
+ }
+ }
encoderOut.writeRequest = writeRequest;
encoderOut.flush();
@@ -126,28 +140,8 @@
finally
{
// Dispose encoder and decoder safely.
- // FIXME: Think what we have to do for connectionless transport types
- ProtocolEncoder encoder = getEncoder( session );
- ProtocolDecoder decoder = getDecoder( session );
- try
- {
- encoder.dispose();
- }
- catch( Throwable t )
- {
- log.warning( "Failed to dispose: " + encoder.getClass().getName() +
- " (" + encoder + ')' );
- }
-
- try
- {
- decoder.dispose();
- }
- catch( Throwable t )
- {
- log.warning( "Falied to dispose: " + decoder.getClass().getName() +
- " (" + decoder + ')' );
- }
+ disposeEncoder( session );
+ disposeDecoder( session );
}
}
@@ -195,6 +189,46 @@
return out;
}
+ private void disposeEncoder( IoSession session )
+ {
+ session.removeAttribute( ENCODER_OUT );
+ ProtocolEncoder encoder = ( ProtocolEncoder ) session.removeAttribute( ENCODER );
+ if( encoder == null )
+ {
+ return;
+ }
+
+ try
+ {
+ encoder.dispose();
+ }
+ catch( Throwable t )
+ {
+ log.warning( "Failed to dispose: " + encoder.getClass().getName() +
+ " (" + encoder + ')' );
+ }
+ }
+
+ private void disposeDecoder( IoSession session )
+ {
+ session.removeAttribute( DECODER_OUT );
+ ProtocolDecoder decoder = ( ProtocolDecoder ) session.removeAttribute( DECODER );
+ if( decoder == null )
+ {
+ return;
+ }
+
+ try
+ {
+ decoder.dispose();
+ }
+ catch( Throwable t )
+ {
+ log.warning( "Falied to dispose: " + decoder.getClass().getName() +
+ " (" + decoder + ')' );
+ }
+ }
+
private static class MessageByteBuffer extends ByteBufferProxy
{
private final Object message;