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/11/15 15:54:53 UTC
svn commit: r344371 - in /directory/network/trunk/src:
java/org/apache/mina/common/ java/org/apache/mina/filter/
java/org/apache/mina/filter/codec/ java/org/apache/mina/filter/support/
java/org/apache/mina/transport/socket/nio/support/ java/org/apache/...
Author: trustin
Date: Tue Nov 15 06:54:39 2005
New Revision: 344371
URL: http://svn.apache.org/viewcvs?rev=344371&view=rev
Log:
Resolved issue: DIRMINA-125 - IoSession.isClosing()
* Added IoSession.isClosing() and implemented it for all transport types
* Removed some old TODOs.
Modified:
directory/network/trunk/src/java/org/apache/mina/common/IoSession.java
directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
directory/network/trunk/src/java/org/apache/mina/filter/support/SSLHandler.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java
directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java
directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java
directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java
directory/network/trunk/src/test/org/apache/mina/common/IoFilterChainTest.java
directory/network/trunk/src/test/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java
directory/network/trunk/src/test/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java
Modified: directory/network/trunk/src/java/org/apache/mina/common/IoSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoSession.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/IoSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/IoSession.java Tue Nov 15 06:54:39 2005
@@ -134,6 +134,12 @@
* Returns <code>true</code> if this session is connected with remote peer.
*/
boolean isConnected();
+
+ /**
+ * Returns <code>true</tt> if and only if this session is being closed
+ * (but not disconnected yet) or is closed.
+ */
+ boolean isClosing();
/**
* Returns the socket address of remote peer.
Modified: directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java Tue Nov 15 06:54:39 2005
@@ -66,8 +66,6 @@
* }
* </pre>
*
- * TODO: Test this filter regressively in a multi-processor machine.
- *
* @author The Apache Directory Project (dev@directory.apache.org)
* @version $Rev$, $Date$
*/
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=344371&r1=344370&r2=344371&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 Tue Nov 15 06:54:39 2005
@@ -151,16 +151,9 @@
public void sessionClosed( NextFilter nextFilter, IoSession session ) throws Exception
{
- try
- {
- nextFilter.sessionClosed( session );
- }
- finally
- {
- // Dispose encoder and decoder safely.
- disposeEncoder( session );
- disposeDecoder( session );
- }
+ disposeEncoder( session );
+ disposeDecoder( session );
+ nextFilter.sessionClosed( session );
}
private ProtocolEncoder getEncoder( IoSession session )
Modified: directory/network/trunk/src/java/org/apache/mina/filter/support/SSLHandler.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/support/SSLHandler.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/support/SSLHandler.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/support/SSLHandler.java Tue Nov 15 06:54:39 2005
@@ -477,8 +477,6 @@
outNetBuffer.flip();
initialHandshakeStatus = result.getHandshakeStatus();
writeNetBuffer( nextFilter );
- // return to allow data on out buffer being sent
- // TODO: We might want to send more data immidiatley?
}
else
{
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Tue Nov 15 06:54:39 2005
@@ -61,6 +61,7 @@
private SelectionKey key;
private final CloseFuture closeFuture = new CloseFuture();
+ private boolean closing;
/**
* Creates a new instance.
@@ -114,12 +115,18 @@
public CloseFuture close()
{
- if( !closeFuture.isReady() )
+ if( !closing && !closeFuture.isReady() )
{
+ closing = true;
managerFilterChain.filterClose( this, closeFuture );
}
return closeFuture;
}
+
+ public boolean isClosing()
+ {
+ return closing;
+ }
Queue getWriteRequestQueue()
{
@@ -129,7 +136,14 @@
public WriteFuture write( Object message )
{
WriteFuture future = new WriteFuture();
- filterChain.filterWrite( this, new WriteRequest( message, future ) );
+ if( isClosing() )
+ {
+ future.setWritten( false );
+ }
+ else
+ {
+ filterChain.filterWrite( this, new WriteRequest( message, future ) );
+ }
return future;
}
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java Tue Nov 15 06:54:39 2005
@@ -56,6 +56,7 @@
private final SocketAddress localAddress;
private SelectionKey key;
private CloseFuture closeFuture = new CloseFuture();
+ private boolean closing;
private int readBufferSize = DEFAULT_READ_BUFFER_SIZE;
/**
@@ -118,13 +119,19 @@
public CloseFuture close()
{
- if( !closeFuture.isReady() )
+ if( !closing && !closeFuture.isReady() )
{
+ closing = true;
filterChain.filterClose( this, closeFuture );
}
return closeFuture;
}
+
+ public boolean isClosing()
+ {
+ return closing;
+ }
Queue getWriteRequestQueue()
{
@@ -142,7 +149,14 @@
public WriteFuture write( Object message )
{
WriteFuture future = new WriteFuture();
- filterChain.filterWrite( this, new WriteRequest( message, future ) );
+ if( isClosing() )
+ {
+ future.setWritten( false );
+ }
+ else
+ {
+ filterChain.filterWrite( this, new WriteRequest( message, future ) );
+ }
return future;
}
Modified: directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java Tue Nov 15 06:54:39 2005
@@ -42,7 +42,8 @@
final Object lock;
- boolean closed;
+ private boolean closing;
+ CloseFuture closeFuture = new CloseFuture();
/**
* Constructor for client-side session.
@@ -129,15 +130,32 @@
public CloseFuture close()
{
- CloseFuture future = new CloseFuture();
- managerFilterChain.filterClose( this, future );
- return future;
+ if( !closing )
+ {
+ closing = true;
+ managerFilterChain.filterClose( this, closeFuture );
+ }
+
+ return closeFuture;
+ }
+
+ public boolean isClosing()
+ {
+ return closing;
}
+
public WriteFuture write( Object message )
{
WriteFuture future = new WriteFuture();
- this.filterChain.filterWrite( this, new WriteRequest( message, future ) );
+ if( isClosing() )
+ {
+ future.setWritten( false );
+ }
+ else
+ {
+ this.filterChain.filterWrite( this, new WriteRequest( message, future ) );
+ }
return future;
}
@@ -153,7 +171,7 @@
public boolean isConnected()
{
- return !closed;
+ return !closeFuture.isClosed();
}
public SocketAddress getRemoteAddress()
Modified: directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java Tue Nov 15 06:54:39 2005
@@ -18,14 +18,14 @@
VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
synchronized( s.lock )
{
- if( s.closed )
+ if( s.isConnected() )
{
- writeRequest.getFuture().setWritten( false );
+ s.remoteSession.getManagerFilterChain().messageReceived( s.remoteSession, writeRequest.getMessage() );
+ writeRequest.getFuture().setWritten( true );
}
else
{
- s.remoteSession.getManagerFilterChain().messageReceived( s.remoteSession, writeRequest.getMessage() );
- writeRequest.getFuture().setWritten( true );
+ writeRequest.getFuture().setWritten( false );
}
}
}
@@ -35,9 +35,9 @@
VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
synchronized( s.lock )
{
- if( !s.closed )
+ if( !s.closeFuture.isClosed() )
{
- s.closed = s.remoteSession.closed = true;
+ s.remoteSession.closeFuture.setClosed( true );
s.getManagerFilterChain().sessionClosed( session );
s.remoteSession.getManagerFilterChain().sessionClosed( s.remoteSession );
}
Modified: directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java Tue Nov 15 06:54:39 2005
@@ -121,6 +121,11 @@
protected void updateTrafficMask()
{
}
+
+ public boolean isClosing()
+ {
+ return false;
+ }
};
future.setSession( session );
Modified: directory/network/trunk/src/test/org/apache/mina/common/IoFilterChainTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/common/IoFilterChainTest.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/common/IoFilterChainTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/common/IoFilterChainTest.java Tue Nov 15 06:54:39 2005
@@ -200,6 +200,11 @@
protected void updateTrafficMask()
{
}
+
+ public boolean isClosing()
+ {
+ return false;
+ }
}
private class EventOrderTestFilter implements IoFilter
Modified: directory/network/trunk/src/test/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java Tue Nov 15 06:54:39 2005
@@ -189,6 +189,11 @@
protected void updateTrafficMask()
{
}
+
+ public boolean isClosing()
+ {
+ return false;
+ }
}
private static class EventOrderChecker implements NextFilter
@@ -292,6 +297,11 @@
public int getScheduledWriteRequests()
{
return 0;
+ }
+
+ public boolean isClosing()
+ {
+ return false;
}
}
Modified: directory/network/trunk/src/test/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java?rev=344371&r1=344370&r2=344371&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java Tue Nov 15 06:54:39 2005
@@ -230,5 +230,10 @@
protected void updateTrafficMask()
{
}
+
+ public boolean isClosing()
+ {
+ return false;
+ }
}
}