You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Alex Rudyy (Jira)" <ji...@apache.org> on 2021/05/08 20:30:00 UTC
[jira] [Resolved] (QPID-8510) [Broker-J] Incorect use of volatile
modifier for array
[ https://issues.apache.org/jira/browse/QPID-8510?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alex Rudyy resolved QPID-8510.
------------------------------
Resolution: Fixed
> [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
> Priority: Minor
> Labels: Broker, Java
> Fix For: qpid-java-broker-8.0.5
>
>
> 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-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org