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: [email protected]
For additional commands, e-mail: [email protected]