23 lines
1.5 KiB
Diff
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;
|
|
}
|
|
}
|