diff options
| author | Keith Wall <kwall@apache.org> | 2014-12-05 17:30:06 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-12-05 17:30:06 +0000 |
| commit | 5c48af8564229bb56f45bb47b015be325b8855da (patch) | |
| tree | 3ead817b10a7ba18da4eb39a7d427c506fc30e07 | |
| parent | a0cdd525f55c8386e2b3e86cdd683c69d181c209 (diff) | |
| download | qpid-python-5c48af8564229bb56f45bb47b015be325b8855da.tar.gz | |
Bug fix: Stop 0-8 protocol layer wrapping the same byte array
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/QPID-6262-JavaBrokerNIO@1643363 13f79535-47bb-0310-9956-ffa450edef68
2 files changed, 14 insertions, 21 deletions
diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java index 4212505d75..169b269629 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java @@ -514,20 +514,10 @@ public class AMQProtocolEngine implements ServerProtocolEngine, throw new ServerScopedRuntimeException(e); } - final ByteBuffer buf; - - if(size <= REUSABLE_BYTE_BUFFER_CAPACITY) - { - buf = _reusableByteBuffer; - buf.position(0); - } - else - { - buf = ByteBuffer.wrap(data); - } - buf.limit(_reusableDataOutput.length()); - - return buf; + final ByteBuffer copy = ByteBuffer.allocate(_reusableDataOutput.length()); + copy.put(data, 0, _reusableDataOutput.length()); + copy.flip(); + return copy; } diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/client/AMQQueueDeferredOrderingTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/client/AMQQueueDeferredOrderingTest.java index 3025414e4a..cdd5e13870 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/client/AMQQueueDeferredOrderingTest.java +++ b/qpid/java/systests/src/test/java/org/apache/qpid/client/AMQQueueDeferredOrderingTest.java @@ -39,7 +39,7 @@ public class AMQQueueDeferredOrderingTest extends QpidBrokerTestCase private Session session; private AMQQueue queue; private MessageConsumer consumer; - private int numMessages; + private int _numMessages; private static final Logger _logger = LoggerFactory.getLogger(AMQQueueDeferredOrderingTest.class); @@ -86,7 +86,7 @@ public class AMQQueueDeferredOrderingTest extends QpidBrokerTestCase { super.setUp(); - numMessages = isBrokerStorePersistent() ? 300 : 1000; + _numMessages = isBrokerStorePersistent() ? 300 : 1000; _logger.info("Create Connection"); con = getConnection(); @@ -106,30 +106,33 @@ public class AMQQueueDeferredOrderingTest extends QpidBrokerTestCase // Setup initial messages _logger.info("Creating first producer thread"); - producerThread = new ASyncProducer(queue, 0, numMessages / 2); + producerThread = new ASyncProducer(queue, 0, _numMessages / 2); producerThread.start(); // Wait for them to be done producerThread.join(); // Setup second set of messages to produce while we consume _logger.info("Creating second producer thread"); - producerThread = new ASyncProducer(queue, numMessages / 2, numMessages); + producerThread = new ASyncProducer(queue, _numMessages / 2, _numMessages); producerThread.start(); // Start consuming and checking they're in order _logger.info("Consuming messages"); - for (int i = 0; i < numMessages; i++) + for (int i = 0; i < _numMessages; i++) { Message msg = consumer.receive(3000); + + _logger.debug("KWDEBUG got " + msg); + assertNotNull("Message " + i + " should not be null", msg); assertTrue("Message " + i + " should be a text message", msg instanceof TextMessage); - assertEquals("Message content " + i + "does not match expected", Integer.toString(i), ((TextMessage) msg).getText()); + assertEquals("Message content " + i + " does not match expected", Integer.toString(i), ((TextMessage) msg).getText()); } } protected void tearDown() throws Exception { - _logger.info("Interuptting producer thread"); + _logger.info("Interrupting producer thread"); producerThread.interrupt(); _logger.info("Closing connection"); con.close(); |
