You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/01/22 07:56:57 UTC

svn commit: r498547 - in /mina/branches: 1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java 1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java

Author: trustin
Date: Sun Jan 21 22:56:57 2007
New Revision: 498547

URL: http://svn.apache.org/viewvc?view=rev&rev=498547
Log:
Resolved issue: DIRMINA-287 (DatagramConnector.getRecycledSession() is inefficient.)
* Removed DatagramConnectorDelegate.getRecycledSession().
* Emulated previous buggy recycler behavior anyway. (See DIRMINA-319, DatagramConnector doesn't need IoSessionRecycler at all.)


Modified:
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?view=diff&rev=498547&r1=498546&r2=498547
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Sun Jan 21 22:56:57 2007
@@ -274,7 +274,6 @@
         {
             selector.wakeup();
         }
-        selector.wakeup();
     }
     
     private void scheduleTrafficControl( DatagramSessionImpl session )
@@ -409,13 +408,10 @@
             it.remove();
 
             DatagramSessionImpl session = ( DatagramSessionImpl ) key.attachment();
-
-            DatagramSessionImpl replaceSession = getRecycledSession(session);
-
-            if(replaceSession != null)
-            {
-                session = replaceSession;
-            }
+            
+            // Let the recycler know that the session is still active. 
+            getSessionRecycler( session ).recycle(
+                    session.getLocalAddress(), session.getRemoteAddress() );
 
             if( key.isReadable() && session.getTrafficMask().isReadable() )
             {
@@ -429,30 +425,6 @@
         }
     }
     
-    private DatagramSessionImpl getRecycledSession( IoSession session )
-    {
-        IoSessionRecycler sessionRecycler = getSessionRecycler( session );
-        DatagramSessionImpl replaceSession = null;
-
-        if ( sessionRecycler != null )
-        {
-            synchronized ( sessionRecycler )
-            {
-                replaceSession = ( DatagramSessionImpl ) sessionRecycler.recycle( session.getLocalAddress(), session
-                        .getRemoteAddress() );
-
-                if ( replaceSession != null )
-                {
-                    return replaceSession;
-                }
-
-                sessionRecycler.put( session );
-            }
-        }
-
-        return null;
-    }
-    
     private IoSessionRecycler getSessionRecycler( IoSession session )
     {
         IoServiceConfig config = session.getServiceConfig();
@@ -621,22 +593,15 @@
             boolean success = false;
             try
             {
-                DatagramSessionImpl replaceSession = getRecycledSession( session );
+                SelectionKey key = req.channel.register( selector,
+                        SelectionKey.OP_READ, session );
 
-                if ( replaceSession != null )
-                {
-                    session = replaceSession;
-                }
-                else
-                {
-                    SelectionKey key = req.channel.register( selector,
-                            SelectionKey.OP_READ, session );
+                session.setSelectionKey( key );
+                buildFilterChain( req, session );
+                getSessionRecycler( session ).put( session );
 
-                    session.setSelectionKey( key );
-                    buildFilterChain( req, session );
-                    // The CONNECT_FUTURE attribute is cleared and notified here.
-                    getListeners().fireSessionCreated( session );
-                }
+                // The CONNECT_FUTURE attribute is cleared and notified here.
+                getListeners().fireSessionCreated( session );
                 success = true;
             }
             catch( Throwable t )

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?view=diff&rev=498547&r1=498546&r2=498547
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Sun Jan 21 22:56:57 2007
@@ -36,11 +36,11 @@
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.ExceptionMonitor;
 import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFilter.WriteRequest;
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoServiceConfig;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoSessionRecycler;
+import org.apache.mina.common.IoFilter.WriteRequest;
 import org.apache.mina.common.support.AbstractIoFilterChain;
 import org.apache.mina.common.support.BaseIoConnector;
 import org.apache.mina.common.support.DefaultConnectFuture;
@@ -388,12 +388,9 @@
 
             DatagramSessionImpl session = ( DatagramSessionImpl ) key.attachment();
 
-            DatagramSessionImpl replaceSession = getRecycledSession( session );
-
-            if( replaceSession != null )
-            {
-                session = replaceSession;
-            }
+            // Let the recycler know that the session is still active. 
+            getSessionRecycler( session ).recycle(
+                    session.getLocalAddress(), session.getRemoteAddress() );
 
             if( key.isReadable() && session.getTrafficMask().isReadable() )
             {
@@ -407,30 +404,6 @@
         }
     }
 
-    private DatagramSessionImpl getRecycledSession( IoSession session )
-    {
-        IoSessionRecycler sessionRecycler = getSessionRecycler( session );
-
-        if( sessionRecycler != null )
-        {
-            synchronized( sessionRecycler )
-            {
-                DatagramSessionImpl replaceSession =
-                    ( DatagramSessionImpl ) sessionRecycler.recycle( session.getLocalAddress(),
-                        session.getRemoteAddress() );
-
-                if( replaceSession != null )
-                {
-                    return replaceSession;
-                }
-
-                sessionRecycler.put( session );
-            }
-        }
-
-        return null;
-    }
-
     private IoSessionRecycler getSessionRecycler( IoSession session )
     {
         IoServiceConfig config = session.getServiceConfig();
@@ -580,22 +553,15 @@
             boolean success = false;
             try
             {
-                DatagramSessionImpl replaceSession = getRecycledSession( session );
+                SelectionKey key = req.channel.register( selector,
+                    SelectionKey.OP_READ, session );
 
-                if( replaceSession != null )
-                {
-                    session = replaceSession;
-                }
-                else
-                {
-                    SelectionKey key = req.channel.register( selector,
-                        SelectionKey.OP_READ, session );
+                session.setSelectionKey( key );
+                buildFilterChain( req, session );
+                getSessionRecycler( session ).put( session );
 
-                    session.setSelectionKey( key );
-                    buildFilterChain( req, session );
-                    // The CONNECT_FUTURE attribute is cleared and notified here.
-                    getListeners().fireSessionCreated( session );
-                }
+                // The CONNECT_FUTURE attribute is cleared and notified here.
+                getListeners().fireSessionCreated( session );
                 success = true;
             }
             catch( Throwable t )