java-topology/defects/activemq/patch/activemq-0003-transaction-context-ended-xa-set.patch

23 lines
1.5 KiB
Diff

# UNDF: UNDF-2026-000000733
--- a/activemq-client/src/main/java/org/apache/activemq/TransactionContext.java
+++ b/activemq-client/src/main/java/org/apache/activemq/TransactionContext.java
@@ -70,7 +70,7 @@ public class TransactionContext implements XAResource {
// XATransactionId -> ArrayList of TransactionContext objects
- private final static HashMap<TransactionId, List<TransactionContext>> ENDED_XA_TRANSACTION_CONTEXTS =
- new HashMap<TransactionId, List<TransactionContext>>();
+ private final static HashMap<TransactionId, Set<TransactionContext>> ENDED_XA_TRANSACTION_CONTEXTS =
+ new HashMap<TransactionId, Set<TransactionContext>>(); /* values are Set for O(1) contains in isInXATransaction */
@@ -94,7 +94,7 @@ public class TransactionContext implements XAResource {
public boolean isInXATransaction() {
if (transactionId != null && transactionId.isXATransaction()) {
return true;
} else {
synchronized(ENDED_XA_TRANSACTION_CONTEXTS) {
- for(List<TransactionContext> transactions : ENDED_XA_TRANSACTION_CONTEXTS.values()) {
- if (transactions.contains(this)) { /* was O(C) ArrayList.contains per XA txn — defect */
+ for(Set<TransactionContext> transactions : ENDED_XA_TRANSACTION_CONTEXTS.values()) {
+ if (transactions.contains(this)) { /* O(1) HashSet.contains */
return true;
}
}