Author: rhs
Date: Wed Oct 17 04:39:42 2007
New Revision: 585452

URL: http://svn.apache.org/viewvc?rev=585452&view=rev
Log:
work around MINA close issues

Modified:
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java?rev=585452&r1=585451&r2=585452&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java
 Wed Oct 17 04:39:42 2007
@@ -21,7 +21,9 @@
 package org.apache.qpidity.transport.network.mina;
 
 import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.CloseFuture;
 import org.apache.mina.common.IoSession;
+import org.apache.mina.common.WriteFuture;
 
 import org.apache.qpidity.transport.Sender;
 
@@ -33,8 +35,11 @@
 
 public class MinaSender implements Sender<java.nio.ByteBuffer>
 {
+    private static final int TIMEOUT = 2*60*1000;
 
     private final IoSession session;
+    private final Object lock = new Object();
+    private WriteFuture lastWrite = null;
 
     public MinaSender(IoSession session)
     {
@@ -43,12 +48,25 @@
 
     public void send(java.nio.ByteBuffer buf)
     {
-        session.write(ByteBuffer.wrap(buf));
+        synchronized (lock)
+        {
+            lastWrite = session.write(ByteBuffer.wrap(buf));
+        }
     }
 
     public void close()
     {
-        session.close();
+        // MINA will sometimes throw away in-progress writes when you
+        // ask it to close
+        synchronized (lock)
+        {
+            if (lastWrite != null)
+            {
+                lastWrite.join();
+            }
+        }
+        CloseFuture closed = session.close();
+        closed.join();
     }
 
 }


Reply via email to