You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2008/08/07 00:44:44 UTC
svn commit: r683437 -
/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java
Author: rhs
Date: Wed Aug 6 15:44:43 2008
New Revision: 683437
URL: http://svn.apache.org/viewvc?rev=683437&view=rev
Log:
QPID-1222: round up the buffer size to the nearest power of two
Modified:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java?rev=683437&r1=683436&r2=683437&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java Wed Aug 6 15:44:43 2008
@@ -61,7 +61,7 @@
{
this.transport = transport;
this.socket = transport.getSocket();
- this.buffer = new byte[bufferSize];
+ this.buffer = new byte[pof2(bufferSize)]; // buffer size must be a power of 2
this.timeout = timeout;
try
@@ -78,6 +78,16 @@
start();
}
+ private static final int pof2(int n)
+ {
+ int result = 1;
+ while (result < n)
+ {
+ result *= 2;
+ }
+ return result;
+ }
+
private static final int mod(int n, int m)
{
int r = n % m;
@@ -106,7 +116,7 @@
{
long start = System.currentTimeMillis();
long elapsed = 0;
- while (head - tail >= size && elapsed < timeout)
+ while (!closed.get() && head - tail >= size && elapsed < timeout)
{
try
{
@@ -119,6 +129,11 @@
elapsed += System.currentTimeMillis() - start;
}
+ if (closed.get())
+ {
+ throw new TransportException("sender is closed", exception);
+ }
+
if (head - tail >= size)
{
throw new TransportException(String.format("write timed out: %s, %s", head, tail));