Marek Laca created QPID-8510: -------------------------------- Summary: [Broker-J] Incorect use of volatile modifier for array Key: QPID-8510 URL: https://issues.apache.org/jira/browse/QPID-8510 Project: Qpid Issue Type: Bug Components: Broker-J Reporter: Marek Laca
Based on Java documentation a change of volatile variable is always visible to other threads. Hence, assignment a new array to the volatile variable guarantees the visibility of the new array to another threads, but there is not any guarantee of the visibility of a new element of the array. Because the insertion of a new element into the volatile array is a change of the internal state of the array. For example there is the method AMQPConnection_1_0Impl::removeTransaction: {code:java} private volatile ServerTransaction[] _openTransactions = new ServerTransaction[16]; @Override public void removeTransaction(final int txnId) { try { _openTransactions[txnId] = null; // There is not any guarantee of the visibility, when the change is propagated to another threads. } catch (ArrayIndexOutOfBoundsException e) { throw new UnknownTransactionException(txnId); } } {code} The same issue is in other methods of AMQPConnection_1_0Impl class. A concurrent collection can be used instead of the volatile array. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org