Author: trustin Date: Tue Dec 6 01:11:05 2005 New Revision: 354382 URL: http://svn.apache.org/viewcvs?rev=354382&view=rev Log: My previous fix on DIRMINA-138 (Deadlock in SSLFilter) caused a lot of problems. I'm reverting back and applying a brand new fix. Modified: directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java directory/network/trunk/src/java/org/apache/mina/common/ConnectFuture.java directory/network/trunk/src/java/org/apache/mina/common/IoFuture.java directory/network/trunk/src/java/org/apache/mina/common/WriteFuture.java directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.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 Modified: directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java?rev=354382&r1=354381&r2=354382&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java Tue Dec 6 01:11:05 2005 @@ -44,14 +44,6 @@ } /** - * Creates a new instance which uses the specified object as a lock. - */ - public CloseFuture( Object lock ) - { - super( lock ); - } - - /** * Returns true if the close request is finished and the session is closed. */ public boolean isClosed() Modified: directory/network/trunk/src/java/org/apache/mina/common/ConnectFuture.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/ConnectFuture.java?rev=354382&r1=354381&r2=354382&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/ConnectFuture.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/ConnectFuture.java Tue Dec 6 01:11:05 2005 @@ -54,14 +54,6 @@ } /** - * Creates a new instance which uses the specified object as a lock. - */ - public ConnectFuture( Object lock ) - { - super( lock ); - } - - /** * Returns {@link IoSession} which is the result of connect operation. * * @return null if the connect operation is not finished yet Modified: directory/network/trunk/src/java/org/apache/mina/common/IoFuture.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoFuture.java?rev=354382&r1=354381&r2=354382&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoFuture.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/IoFuture.java Tue Dec 6 01:11:05 2005 @@ -57,26 +57,6 @@ } /** - * Creates a new instance which uses the specified object as a lock. - */ - protected IoFuture( Object lock ) - { - if( lock == null ) - { - throw new NullPointerException( "lock" ); - } - this.lock = lock; - } - - /** - * Returns the lock object this future acquires. - */ - public Object getLock() - { - return lock; - } - - /** * Wait for the asynchronous operation to end. */ public void join() Modified: directory/network/trunk/src/java/org/apache/mina/common/WriteFuture.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/WriteFuture.java?rev=354382&r1=354381&r2=354382&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/WriteFuture.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/WriteFuture.java Tue Dec 6 01:11:05 2005 @@ -71,14 +71,6 @@ } /** - * Creates a new instance which uses the specified object as a lock. - */ - public WriteFuture( Object lock ) - { - super( lock ); - } - - /** * Returns true if the write operation is finished successfully. */ public boolean isWritten() Modified: directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java?rev=354382&r1=354381&r2=354382&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java Tue Dec 6 01:11:05 2005 @@ -45,7 +45,7 @@ /** * A future that will be set 'closed' when the connection is closed. */ - private final CloseFuture closeFuture = new CloseFuture( this ); + private final CloseFuture closeFuture = new CloseFuture(); private boolean closing; // Configuration variables @@ -126,7 +126,7 @@ } else { - future = new WriteFuture( this ); + future = new WriteFuture(); write0( new WriteRequest( message, future ) ); } return future; 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=354382&r1=354381&r2=354382&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 Dec 6 01:11:05 2005 @@ -570,19 +570,25 @@ public void filterClose( NextFilter nextFilter, IoSession session, CloseFuture closeFuture ) throws SSLException { + WriteFuture future = null; synchronized( session ) { try { if( isSSLStarted( session ) ) { - initiateClosure( nextFilter, session ).join(); + future = initiateClosure( nextFilter, session ); } } finally { nextFilter.filterClose( session, closeFuture ); } + } + + if( future != null ) + { + future.join(); } } 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=354382&r1=354381&r2=354382&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 Dec 6 01:11:05 2005 @@ -289,7 +289,7 @@ } else { - future = new WriteFuture( session ); + future = new WriteFuture(); nextFilter.filterWrite( session, new WriteRequest( buf, future ) ); } return future; 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=354382&r1=354381&r2=354382&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 Dec 6 01:11:05 2005 @@ -511,7 +511,7 @@ } //debug("outNetBuffer (after copy): {0}", sslHandler.getOutNetBuffer()); - writeFuture = new WriteFuture( session ); + writeFuture = new WriteFuture(); parent.filterWrite( nextFilter, session, new WriteRequest( writeBuffer, writeFuture ) ); // loop while more writes required to complete handshake @@ -535,7 +535,7 @@ SessionLog.debug( session, " write outNetBuffer2: " + getOutNetBuffer() ); } org.apache.mina.common.ByteBuffer writeBuffer2 = copy( getOutNetBuffer() ); - writeFuture = new WriteFuture( session ); + writeFuture = new WriteFuture(); parent.filterWrite( nextFilter, session, new WriteRequest( writeBuffer2, writeFuture ) ); } }