summaryrefslogtreecommitdiff
path: root/java/common/src
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2007-10-17 11:39:42 +0000
committerRafael H. Schloming <rhs@apache.org>2007-10-17 11:39:42 +0000
commit8bbf78262d6cf529643c91a15dcd7a665b9c29b6 (patch)
tree61c4b08f33f66dbf8c526888a1c8e73dff472e35 /java/common/src
parent602894027159b3c325bc6291449f949797828fe9 (diff)
downloadqpid-python-8bbf78262d6cf529643c91a15dcd7a665b9c29b6.tar.gz
work around MINA close issues
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@585452 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/common/src')
-rw-r--r--java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java22
1 files changed, 20 insertions, 2 deletions
diff --git a/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java b/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java
index 54e9ec28ef..c9032554fa 100644
--- a/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java
+++ b/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaSender.java
@@ -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 @@ import org.apache.qpidity.transport.Sender;
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 class MinaSender implements Sender<java.nio.ByteBuffer>
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();
}
}