diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2007-10-17 11:39:42 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2007-10-17 11:39:42 +0000 |
| commit | 8bbf78262d6cf529643c91a15dcd7a665b9c29b6 (patch) | |
| tree | 61c4b08f33f66dbf8c526888a1c8e73dff472e35 /java/common/src | |
| parent | 602894027159b3c325bc6291449f949797828fe9 (diff) | |
| download | qpid-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.java | 22 |
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(); } } |
