[Race Condition] Call to attainState in makeBrokerConnection can miss the
notification of state change.
-------------------------------------------------------------------------------------------------------
Key: QPID-313
URL: https://issues.apache.org/jira/browse/QPID-313
Project: Qpid
Issue Type: Bug
Components: Java Client
Reporter: Martin Ritchie
Priority: Blocker
in AMQConnection()
TransportConnection.getInstance(brokerDetail).connect(_protocolHandler,
brokerDetail);
// this blocks until the connection has been set up or when an error
// has prevented the connection being set up
_protocolHandler.attainState(AMQState.CONNECTION_OPEN);
_failoverPolicy.attainedConnection();
This is the only use of attainState in the code. Problem is that the connect
can occur and proceed without locking on the state to attain.
Possible issue in AMQStateManager... attainState() [again only call to this is
the above code]
The _currentState is checked inside synchronized (_stateListener) block.
However _currentState is modifed in the changeState method OUTSIDE of the
synchronized (_stateListener) block. Doing the change in side the block should
ensure that the attainState waiter is setup correctly.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.