https://issues.apache.org/jira/browse/AMQ-4297 -resolve intermittent hang/fail of stomp tests

git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1442688 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gary Tully 2013-02-05 18:30:33 +00:00
parent 4650f998db
commit 37ad85e3bd
1 changed files with 17 additions and 11 deletions

View File

@ -107,20 +107,26 @@ public class StompSubscription {
unconsumedMessage.clear();
}
synchronized void onStompCommit(TransactionId transactionId) {
for (Iterator<?> iter = dispatchedMessage.entrySet().iterator(); iter.hasNext();) {
@SuppressWarnings("rawtypes")
Map.Entry entry = (Entry)iter.next();
MessageDispatch msg = (MessageDispatch)entry.getValue();
if (unconsumedMessage.contains(msg)) {
iter.remove();
void onStompCommit(TransactionId transactionId) {
MessageAck ack = null;
synchronized (this) {
for (Iterator<?> iter = dispatchedMessage.entrySet().iterator(); iter.hasNext();) {
@SuppressWarnings("rawtypes")
Map.Entry entry = (Entry)iter.next();
MessageDispatch msg = (MessageDispatch)entry.getValue();
if (unconsumedMessage.contains(msg)) {
iter.remove();
}
}
if (!unconsumedMessage.isEmpty()) {
ack = new MessageAck(unconsumedMessage.getLast(), MessageAck.STANDARD_ACK_TYPE, unconsumedMessage.size());
unconsumedMessage.clear();
}
}
if (!unconsumedMessage.isEmpty()) {
MessageAck ack = new MessageAck(unconsumedMessage.getLast(), MessageAck.STANDARD_ACK_TYPE, unconsumedMessage.size());
// avoid contention with onMessageDispatch
if (ack != null) {
protocolConverter.getStompTransport().sendToActiveMQ(ack);
unconsumedMessage.clear();
}
}