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 2006/03/12 06:36:34 UTC

svn commit: r385252 - in /directory/trunks/mina/core/src: main/java/org/apache/mina/common/support/ main/java/org/apache/mina/transport/socket/nio/support/ main/java/org/apache/mina/transport/vmpipe/support/ test/java/org/apache/mina/common/

Author: trustin
Date: Sat Mar 11 21:36:32 2006
New Revision: 385252

URL: http://svn.apache.org/viewcvs?rev=385252&view=rev
Log:
* AbstractIoFilterChain.messageSent() calls WriteFuture.setWritten(true) to remove code duplication.
* AbstractIoFilterChain.messageNotSent() calls WriteFuture.setWritten(false) to remove code duplication.
* The ByteBuffer passed via messageSent now has a correct position.

Modified:
    directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
    directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
    directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
    directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramFilterChain.java
    directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketFilterChain.java
    directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java
    directory/trunks/mina/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java
    directory/trunks/mina/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java

Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java Sat Mar 11 21:36:32 2006
@@ -509,10 +509,30 @@
         }
     }
 
-    public void messageSent( IoSession session, Object message )
+    public void messageNotSent( IoSession session, WriteRequest request )
     {
+        try
+        {
+            request.getFuture().setWritten( false );
+        }
+        catch( Throwable t )
+        {
+            exceptionCaught( session, t );
+        }
+    }
+
+    public void messageSent( IoSession session, WriteRequest request )
+    {
+        try
+        {
+            request.getFuture().setWritten( true );
+        }
+        catch( Throwable t )
+        {
+            exceptionCaught( session, t );
+        }
         Entry head = this.head;
-        callNextMessageSent(head, session, message);
+        callNextMessageSent( head, session, request.getMessage() );
     }
 
     private void callNextMessageSent( Entry entry,

Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java Sat Mar 11 21:36:32 2006
@@ -465,9 +465,9 @@
                     writeRequestQueue.pop();
                 }
 
-                req.getFuture().setWritten( true );
                 session.increaseWrittenWriteRequests();
-                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, buf );
+                buf.reset();
+                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, req );
                 continue;
             }
 
@@ -482,7 +482,6 @@
                 continue;
             }
 
-            int pos = buf.position();
             int writtenBytes = ch
                     .send( buf.buf(), session.getRemoteAddress() );
 
@@ -503,9 +502,9 @@
                 }
 
                 session.increaseWrittenBytes( writtenBytes );
-                req.getFuture().setWritten( true );
                 session.increaseWrittenWriteRequests();
-                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, buf.position( pos ) );
+                buf.reset();
+                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, req );
             }
         }
     }

Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Sat Mar 11 21:36:32 2006
@@ -481,9 +481,9 @@
                     writeRequestQueue.pop();
                 }
 
-                req.getFuture().setWritten( true );
                 session.increaseWrittenWriteRequests();
-                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, buf );
+                buf.reset();
+                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, req );
                 continue;
             }
 
@@ -498,7 +498,6 @@
                 continue;
             }
 
-            int pos = buf.position();
             int writtenBytes = ch.write( buf.buf() );
 
             if( writtenBytes == 0 )
@@ -518,9 +517,9 @@
                 }
 
                 session.increaseWrittenBytes( writtenBytes );
-                req.getFuture().setWritten( true );
                 session.increaseWrittenWriteRequests();
-                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, buf.position( pos ) );
+                buf.reset();
+                ( ( DatagramFilterChain ) session.getFilterChain() ).messageSent( session, req );
             }
         }
     }

Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramFilterChain.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramFilterChain.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramFilterChain.java Sat Mar 11 21:36:32 2006
@@ -18,6 +18,7 @@
  */
 package org.apache.mina.transport.socket.nio.support;
 
+import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoFilter.WriteRequest;
@@ -41,6 +42,9 @@
         DatagramSessionImpl s = ( DatagramSessionImpl ) session;
         Queue writeRequestQueue = s.getWriteRequestQueue();
         
+        // SocketIoProcessor.doFlush() will reset it after write is finished
+        // because the buffer will be passed with messageSent event. 
+        ( ( ByteBuffer ) writeRequest.getMessage() ).mark();
         synchronized( writeRequestQueue )
         {
             writeRequestQueue.push( writeRequest );

Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketFilterChain.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketFilterChain.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketFilterChain.java Sat Mar 11 21:36:32 2006
@@ -26,6 +26,8 @@
         SocketSessionImpl s = ( SocketSessionImpl ) session;
         Queue writeRequestQueue = s.getWriteRequestQueue();
         
+        // SocketIoProcessor.doFlush() will reset it after write is finished
+        // because the buffer will be passed with messageSent event. 
         ( ( ByteBuffer ) writeRequest.getMessage() ).mark();
         synchronized( writeRequestQueue )
         {

Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java Sat Mar 11 21:36:32 2006
@@ -459,7 +459,7 @@
             }
             finally
             {
-                req.getFuture().setWritten( false );
+                ( ( SocketFilterChain ) session.getFilterChain() ).messageNotSent( session, req );
             }
         }
     }
@@ -492,9 +492,10 @@
                     writeRequestQueue.pop();
                 }
                 
-                req.getFuture().setWritten( true );
                 session.increaseWrittenWriteRequests();
-                ( ( SocketFilterChain ) session.getFilterChain() ).messageSent( session, buf.reset() );
+                
+                buf.reset();
+                ( ( SocketFilterChain ) session.getFilterChain() ).messageSent( session, req );
                 continue;
             }
 

Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java Sat Mar 11 21:36:32 2006
@@ -64,26 +64,26 @@
                     if( message instanceof ByteBuffer )
                     {
                         ByteBuffer rb = ( ByteBuffer ) message;
+                        rb.mark();
                         byteCount = rb.remaining();
                         ByteBuffer wb = ByteBuffer.allocate( rb.remaining() );
                         wb.put( rb );
                         wb.flip();
+                        rb.reset();
                         messageCopy = wb;
                     }
                     
                     s.increaseWrittenBytes( byteCount );
                     s.increaseWrittenWriteRequests();
     
-                    ( ( VmPipeFilterChain ) s.getFilterChain() ).messageSent( s, message );
+                    ( ( VmPipeFilterChain ) s.getFilterChain() ).messageSent( s, writeRequest );
                     ( ( VmPipeFilterChain ) s.remoteSession.getFilterChain() )
                                 .messageReceived( s.remoteSession, messageCopy );
-                    
-                    writeRequest.getFuture().setWritten( true );
                 }
             }
             else 
             {
-                writeRequest.getFuture().setWritten( false );
+                ( ( VmPipeFilterChain ) s.getFilterChain() ).messageNotSent( s, writeRequest );
             }
         }
     }

Modified: directory/trunks/mina/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java?rev=385252&r1=385251&r2=385252&view=diff
==============================================================================
--- directory/trunks/mina/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java (original)
+++ directory/trunks/mina/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java Sat Mar 11 21:36:32 2006
@@ -438,7 +438,7 @@
 
         protected void doWrite( IoSession session, WriteRequest writeRequest )
         {
-            messageSent( session, writeRequest.getMessage() );
+            messageSent( session, writeRequest );
         }
 
         protected void doClose( IoSession session )