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/03/24 03:16:01 UTC

svn commit: r158860 - in directory/network/trunk/src/java/org/apache/mina/io: datagram/DatagramAcceptor.java socket/SocketAcceptor.java

Author: trustin
Date: Wed Mar 23 18:15:59 2005
New Revision: 158860

URL: http://svn.apache.org/viewcvs?view=rev&rev=158860
Log:
Fixed: Acceptor.unbind() blocks forever if user tried to unbind unbound address.

Modified:
    directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
    directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java

Modified: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java?view=diff&r1=158859&r2=158860
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java Wed Mar 23 18:15:59 2005
@@ -460,25 +460,21 @@
             }
 
             DatagramChannel ch = ( DatagramChannel ) channels.get( request.address );
-            if( ch == null )
+            // close the channel
+            try
             {
-                synchronized( request )
+                if( ch == null )
                 {
-                    request.done = true;
                     request.exception = new IllegalArgumentException(
                             "Address not bound: " + request.address );
                 }
-                continue;
-            }
-            
-            SelectionKey key = ch.keyFor( selector );
-            key.cancel();
-            selector.wakeup(); // wake up again to trigger thread death
-            
-            // close the channel
-            try
-            {
-                ch.close();
+                else
+                {
+                    SelectionKey key = ch.keyFor( selector );
+                    key.cancel();
+                    selector.wakeup(); // wake up again to trigger thread death
+                    ch.close();
+                }
             }
             catch( IOException e )
             {

Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java?view=diff&r1=158859&r2=158860
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java Wed Mar 23 18:15:59 2005
@@ -317,25 +317,22 @@
             }
 
             ServerSocketChannel ssc = ( ServerSocketChannel ) channels.get( request.address );
-            if( ssc == null )
+            
+            // close the channel
+            try
             {
-                synchronized( request )
+                if( ssc == null )
                 {
-                    request.done = true;
                     request.exception = new IllegalArgumentException(
                             "Address not bound: " + request.address );
                 }
-                continue;
-            }
-            
-            SelectionKey key = ssc.keyFor( selector );
-            key.cancel();
-            selector.wakeup(); // wake up again to trigger thread death
-            
-            // close the channel
-            try
-            {
-                ssc.close();
+                else
+                {
+                    SelectionKey key = ssc.keyFor( selector );
+                    key.cancel();
+                    selector.wakeup(); // wake up again to trigger thread death
+                    ssc.close();
+                }
             }
             catch( IOException e )
             {