Author: trustin
Date: Thu Aug  2 01:37:24 2007
New Revision: 562044

URL: http://svn.apache.org/viewvc?view=rev&rev=562044
Log:
Fixed a problem SSLFilterTest sometimes fails

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

Modified: 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=562044&r1=562043&r2=562044
==============================================================================
--- 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Thu Aug  2 01:37:24 2007
@@ -360,13 +360,31 @@
         Queue writeRequestQueue = session.getWriteRequestQueue();
         WriteRequest req;
 
-        while ((req = (WriteRequest) writeRequestQueue.pop()) != null) {
+        if ((req = (WriteRequest) writeRequestQueue.pop()) != null) {
+            ByteBuffer buf = (ByteBuffer) req.getMessage();
             try {
-                ((ByteBuffer) req.getMessage()).release();
+                buf.release();
             } catch (IllegalStateException e) {
                 session.getFilterChain().fireExceptionCaught(session, e);
             } finally {
-                req.getFuture().setWritten(false);
+                // The first unwritten empty buffer must be
+                // forwarded to the filter chain.
+                if (buf.hasRemaining()) {
+                    req.getFuture().setWritten(false);
+                } else {
+                    session.getFilterChain().fireMessageSent(session, req);    
                
+                }
+            }
+
+            // Discard others.
+            while ((req = (WriteRequest) writeRequestQueue.pop()) != null) {
+                try {
+                    ((ByteBuffer) req.getMessage()).release();
+                } catch (IllegalStateException e) {
+                    session.getFilterChain().fireExceptionCaught(session, e);
+                } finally {
+                    req.getFuture().setWritten(false);
+                }
             }
         }
     }

Modified: 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=562044&r1=562043&r2=562044
==============================================================================
--- 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Thu Aug  2 01:37:24 2007
@@ -322,14 +322,32 @@
     private void releaseWriteBuffers(SocketSessionImpl session) {
         Queue<WriteRequest> writeRequestQueue = session.getWriteRequestQueue();
         WriteRequest req;
-
-        while ((req = writeRequestQueue.poll()) != null) {
+        
+        if ((req = writeRequestQueue.poll()) != null) {
+            ByteBuffer buf = (ByteBuffer) req.getMessage();
             try {
-                ((ByteBuffer) req.getMessage()).release();
+                buf.release();
             } catch (IllegalStateException e) {
                 session.getFilterChain().fireExceptionCaught(session, e);
             } finally {
-                req.getFuture().setWritten(false);
+                // The first unwritten empty buffer must be
+                // forwarded to the filter chain.
+                if (buf.hasRemaining()) {
+                    req.getFuture().setWritten(false);
+                } else {
+                    session.getFilterChain().fireMessageSent(session, req);    
                
+                }
+            }
+
+            // Discard others.
+            while ((req = writeRequestQueue.poll()) != null) {
+                try {
+                    ((ByteBuffer) req.getMessage()).release();
+                } catch (IllegalStateException e) {
+                    session.getFilterChain().fireExceptionCaught(session, e);
+                } finally {
+                    req.getFuture().setWritten(false);
+                }
             }
         }
     }

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=562044&r1=562043&r2=562044
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Thu Aug  2 01:37:24 2007
@@ -358,8 +358,20 @@
         Queue<WriteRequest> writeRequestQueue = session.getWriteRequestQueue();
         WriteRequest req;
 
-        while ((req = writeRequestQueue.poll()) != null) {
-            req.getFuture().setWritten(false);
+        if ((req = writeRequestQueue.poll()) != null) {
+            ByteBuffer buf = (ByteBuffer) req.getMessage();
+            // The first unwritten empty buffer must be
+            // forwarded to the filter chain.
+            if (buf.hasRemaining()) {
+                req.getFuture().setWritten(false);
+            } else {
+                session.getFilterChain().fireMessageSent(session, req);        
            
+            }
+
+            // Discard others.
+            while ((req = writeRequestQueue.poll()) != null) {
+                req.getFuture().setWritten(false);
+            }
         }
     }
 


Reply via email to