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();
}
}