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/06/07 03:31:14 UTC

svn commit: r188654 - in /directory/network: branches/0.7/src/java/org/apache/mina/io/datagram/ branches/0.7/src/java/org/apache/mina/io/socket/ branches/0.7/src/java/org/apache/mina/protocol/io/ trunk/src/java/org/apache/mina/transport/socket/nio/ trunk/src/test/org/apache/mina/transport/socket/nio/

Author: trustin
Date: Mon Jun  6 18:31:11 2005
New Revision: 188654

URL: http://svn.apache.org/viewcvs?rev=188654&view=rev
Log:
Fixed: DIRMINA-49
Fixed compilation error for DIRMINA-54


Modified:
    directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
    directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramConnector.java
    directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java
    directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketConnector.java
    directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoAdapter.java
    directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java
    directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramConnector.java
    directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
    directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketConnector.java
    directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/DatagramBindTest.java
    directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/SocketBindTest.java

Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java Mon Jun  6 18:31:11 2005
@@ -52,7 +52,7 @@
 
     private final int id = nextId ++ ;
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Map channels = new HashMap();
 
@@ -66,12 +66,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException if failed to open a selector.
      */
-    public DatagramAcceptor() throws IOException
+    public DatagramAcceptor()
     {
-        selector = Selector.open();
     }
 
     public void bind( SocketAddress address, IoHandler handler )
@@ -127,11 +124,23 @@
         CancellationRequest request = new CancellationRequest( address );
         synchronized( this )
         {
+            try
+            {
+                startupWorker();
+            }
+            catch( IOException e )
+            {
+                // IOException is thrown only when Worker thread is not
+                // running and failed to open a selector.  We simply throw
+                // IllegalArgumentException here because we can simply
+                // conclude that nothing is bound to the selector.
+                throw new IllegalArgumentException( "Address not bound: " + address );
+            }
+
             synchronized( cancelQueue )
             {
                 cancelQueue.push( request );
             }
-            startupWorker();
         }
         selector.wakeup();
         
@@ -156,10 +165,11 @@
         }
     }
     
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
             worker.start();
         }
@@ -217,6 +227,18 @@
                                 cancelQueue.isEmpty() )
                             {
                                 worker = null;
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( DatagramAcceptor.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramConnector.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramConnector.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramConnector.java Mon Jun  6 18:31:11 2005
@@ -51,7 +51,7 @@
 
     private final int id = nextId ++ ;
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Queue registerQueue = new Queue();
 
@@ -63,12 +63,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException if failed to open a selector
      */
-    public DatagramConnector() throws IOException
+    public DatagramConnector()
     {
-        selector = Selector.open();
     }
 
     public IoSession connect( SocketAddress address, IoHandler handler ) throws IOException
@@ -159,10 +156,11 @@
         return request.session;
     }
     
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
             worker.start();
         }
@@ -172,12 +170,25 @@
     {
         synchronized( this )
         {
+            try
+            {
+                startupWorker();
+            }
+            catch( IOException e )
+            {
+                // IOException is thrown only when Worker thread is not
+                // running and failed to open a selector.  We simply return
+                // silently here because it we can simply conclude that
+                // this session is not managed by this connector or
+                // already closed.
+                return;
+            }
+
             SelectionKey key = session.getSelectionKey();
             synchronized( cancelQueue )
             {
                 cancelQueue.push( key );
             }
-            startupWorker();
         }
 
         selector.wakeup();
@@ -231,6 +242,18 @@
                                 cancelQueue.isEmpty() )
                             {
                                 worker = null;
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( DatagramConnector.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java Mon Jun  6 18:31:11 2005
@@ -51,7 +51,7 @@
 
     private final int id = nextId ++ ;
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Map channels = new HashMap();
 
@@ -66,12 +66,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException
      */
-    public SocketAcceptor() throws IOException
+    public SocketAcceptor()
     {
-        selector = Selector.open();
     }
 
     /**
@@ -137,10 +134,11 @@
     }
 
 
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
 
             worker.start();
@@ -158,11 +156,23 @@
         CancellationRequest request = new CancellationRequest( address );
         synchronized( this )
         {
+            try
+            {
+                startupWorker();
+            }
+            catch( IOException e )
+            {
+                // IOException is thrown only when Worker thread is not
+                // running and failed to open a selector.  We simply throw
+                // IllegalArgumentException here because we can simply
+                // conclude that nothing is bound to the selector.
+                throw new IllegalArgumentException( "Address not bound: " + address );
+            }
+
             synchronized( cancelQueue )
             {
                 cancelQueue.push( request );
             }
-            startupWorker();
         }
         
         selector.wakeup();
@@ -242,7 +252,18 @@
                                 cancelQueue.isEmpty() )
                             {
                                 worker = null;
-
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( SocketAcceptor.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketConnector.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketConnector.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketConnector.java Mon Jun  6 18:31:11 2005
@@ -51,7 +51,7 @@
 
     private final IoSessionManagerFilterChain filters = new SocketSessionManagerFilterChain( this );
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Queue connectQueue = new Queue();
 
@@ -59,12 +59,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException
      */
-    public SocketConnector() throws IOException
+    public SocketConnector()
     {
-        selector = Selector.open();
     }
 
     public IoSession connect( SocketAddress address, IoHandler handler ) throws IOException
@@ -163,10 +160,11 @@
         return request.session;
     }
     
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
             worker.start();
         }
@@ -331,6 +329,18 @@
                                 connectQueue.isEmpty() )
                             {
                                 worker = null;
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( SocketConnector.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoAdapter.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoAdapter.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoAdapter.java Mon Jun  6 18:31:11 2005
@@ -100,7 +100,7 @@
             this.handler = protocolProvider.getHandler();
         }
         
-        public void sessionCreated( IoSession session )
+        public void sessionCreated( IoSession session ) throws Exception
         {
             handler.sessionCreated( getProtocolSession( session ) );
         }

Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java Mon Jun  6 18:31:11 2005
@@ -52,7 +52,7 @@
 
     private final int id = nextId ++ ;
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Map channels = new HashMap();
 
@@ -66,12 +66,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException if failed to open a selector.
      */
-    public DatagramAcceptor() throws IOException
+    public DatagramAcceptor()
     {
-        selector = Selector.open();
     }
 
     public void bind( SocketAddress address, IoHandler handler )
@@ -127,11 +124,23 @@
         CancellationRequest request = new CancellationRequest( address );
         synchronized( this )
         {
+            try
+            {
+                startupWorker();
+            }
+            catch( IOException e )
+            {
+                // IOException is thrown only when Worker thread is not
+                // running and failed to open a selector.  We simply throw
+                // IllegalArgumentException here because we can simply
+                // conclude that nothing is bound to the selector.
+                throw new IllegalArgumentException( "Address not bound: " + address );
+            }
+
             synchronized( cancelQueue )
             {
                 cancelQueue.push( request );
             }
-            startupWorker();
         }
         selector.wakeup();
         
@@ -156,10 +165,11 @@
         }
     }
     
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
             worker.start();
         }
@@ -217,6 +227,18 @@
                                 cancelQueue.isEmpty() )
                             {
                                 worker = null;
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( DatagramAcceptor.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramConnector.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramConnector.java Mon Jun  6 18:31:11 2005
@@ -51,7 +51,7 @@
 
     private final int id = nextId ++ ;
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Queue registerQueue = new Queue();
 
@@ -63,12 +63,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException if failed to open a selector
      */
-    public DatagramConnector() throws IOException
+    public DatagramConnector()
     {
-        selector = Selector.open();
     }
 
     public IoSession connect( SocketAddress address, IoHandler handler ) throws IOException
@@ -159,10 +156,11 @@
         return request.session;
     }
     
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
             worker.start();
         }
@@ -172,12 +170,25 @@
     {
         synchronized( this )
         {
+            try
+            {
+                startupWorker();
+            }
+            catch( IOException e )
+            {
+                // IOException is thrown only when Worker thread is not
+                // running and failed to open a selector.  We simply return
+                // silently here because it we can simply conclude that
+                // this session is not managed by this connector or
+                // already closed.
+                return;
+            }
+
             SelectionKey key = session.getSelectionKey();
             synchronized( cancelQueue )
             {
                 cancelQueue.push( key );
             }
-            startupWorker();
         }
 
         selector.wakeup();
@@ -231,6 +242,18 @@
                                 cancelQueue.isEmpty() )
                             {
                                 worker = null;
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( DatagramConnector.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java Mon Jun  6 18:31:11 2005
@@ -51,7 +51,7 @@
 
     private final int id = nextId ++ ;
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Map channels = new HashMap();
 
@@ -66,12 +66,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException
      */
-    public SocketAcceptor() throws IOException
+    public SocketAcceptor()
     {
-        selector = Selector.open();
     }
 
     /**
@@ -137,10 +134,11 @@
     }
 
 
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
 
             worker.start();
@@ -158,11 +156,23 @@
         CancellationRequest request = new CancellationRequest( address );
         synchronized( this )
         {
+            try
+            {
+                startupWorker();
+            }
+            catch( IOException e )
+            {
+                // IOException is thrown only when Worker thread is not
+                // running and failed to open a selector.  We simply throw
+                // IllegalArgumentException here because we can simply
+                // conclude that nothing is bound to the selector.
+                throw new IllegalArgumentException( "Address not bound: " + address );
+            }
+
             synchronized( cancelQueue )
             {
                 cancelQueue.push( request );
             }
-            startupWorker();
         }
         
         selector.wakeup();
@@ -242,7 +252,18 @@
                                 cancelQueue.isEmpty() )
                             {
                                 worker = null;
-
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( SocketAcceptor.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketConnector.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketConnector.java Mon Jun  6 18:31:11 2005
@@ -51,7 +51,7 @@
 
     private final IoSessionManagerFilterChain filters = new SocketSessionManagerFilterChain( this );
 
-    private final Selector selector;
+    private Selector selector;
 
     private final Queue connectQueue = new Queue();
 
@@ -59,12 +59,9 @@
 
     /**
      * Creates a new instance.
-     * 
-     * @throws IOException
      */
-    public SocketConnector() throws IOException
+    public SocketConnector()
     {
-        selector = Selector.open();
     }
 
     public IoSession connect( SocketAddress address, IoHandler handler ) throws IOException
@@ -163,10 +160,11 @@
         return request.session;
     }
     
-    private synchronized void startupWorker()
+    private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
         {
+            selector = Selector.open();
             worker = new Worker();
             worker.start();
         }
@@ -331,6 +329,18 @@
                                 connectQueue.isEmpty() )
                             {
                                 worker = null;
+                                try
+                                {
+                                    selector.close();
+                                }
+                                catch( IOException e )
+                                {
+                                    exceptionMonitor.exceptionCaught( SocketConnector.this, e );
+                                }
+                                finally
+                                {
+                                    selector = null;
+                                }
                                 break;
                             }
                         }

Modified: directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/DatagramBindTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/DatagramBindTest.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/DatagramBindTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/DatagramBindTest.java Mon Jun  6 18:31:11 2005
@@ -18,7 +18,6 @@
  */
 package org.apache.mina.transport.socket.nio;
 
-import java.io.IOException;
 
 /**
  * Tests {@link DatagramAcceptor} resource leakage.
@@ -29,7 +28,7 @@
 public class DatagramBindTest extends AbstractBindTest
 {
 
-    public DatagramBindTest() throws IOException
+    public DatagramBindTest()
     {
         super( new DatagramAcceptor() );
     }

Modified: directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/SocketBindTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/SocketBindTest.java?rev=188654&r1=188653&r2=188654&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/SocketBindTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/transport/socket/nio/SocketBindTest.java Mon Jun  6 18:31:11 2005
@@ -18,7 +18,6 @@
  */
 package org.apache.mina.transport.socket.nio;
 
-import java.io.IOException;
 
 /**
  * Tests {@link SocketAcceptor} resource leakage.
@@ -29,7 +28,7 @@
 public class SocketBindTest extends AbstractBindTest
 {
 
-    public SocketBindTest() throws IOException
+    public SocketBindTest()
     {
         super( new SocketAcceptor() );
     }