[
https://issues.apache.org/jira/browse/AMQ-9658?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Christopher L. Shannon updated AMQ-9658:
----------------------------------------
Description:
incrementing volatile integers is not an atomic operation because the previous
value must first be read, then incremented, and reset so it is a multi step
process. I noticed in the TCP transport code that the receive counter was a
volatile integer and not being incremented properly. This counter is should
only be incremented in the same thread anyways (it can be read by other threads
like inactivity monitor) so it may not technically be an issue in practice but
it still should be handled properly.
The fix is to switch to an AtomicInteger. I also noticed a minor improvement to
make to to the NIOSSLtransport init code that is only used for the auto+nio+ssl
transport that I will fix as well. (ensure the full initialization buffer will
always be entirely read and processed when using the auto+nio+ssl transport. )
This only applies to OpenWire and AMQP.
was:
incrementing volatile integers is not an atomic operation because the previous
value must first be read, then incremented, and reset so it is a multi step
process. I noticed in the TCP transport code that the receive counter was a
volatile integer and not being incremented properly. This counter is should
only be incremented in the same thread anyways (it can be read by other threads
like inactivity monitor) so it may not technically be an issue in practice but
it still should be handled properly.
The fix is to switch to an AtomicInteger. I also noticed a minor improvement to
make to to the NIOSSLtransport init code that is only used for the auto+nio+ssl
transport that I will fix as well. (ensure the full initialization buffer will
always be entirely read and processed when using the auto+nio+ssl transport. )
> TcpTransport volatile receiveCounter is not incremented atomically
> ------------------------------------------------------------------
>
> Key: AMQ-9658
> URL: https://issues.apache.org/jira/browse/AMQ-9658
> Project: ActiveMQ Classic
> Issue Type: Bug
> Affects Versions: 5.18.6, 6.1.5
> Reporter: Christopher L. Shannon
> Assignee: Christopher L. Shannon
> Priority: Minor
> Fix For: 6.2.0, 5.19.0, 6.1.6
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> incrementing volatile integers is not an atomic operation because the
> previous value must first be read, then incremented, and reset so it is a
> multi step process. I noticed in the TCP transport code that the receive
> counter was a volatile integer and not being incremented properly. This
> counter is should only be incremented in the same thread anyways (it can be
> read by other threads like inactivity monitor) so it may not technically be
> an issue in practice but it still should be handled properly.
> The fix is to switch to an AtomicInteger. I also noticed a minor improvement
> to make to to the NIOSSLtransport init code that is only used for the
> auto+nio+ssl transport that I will fix as well. (ensure the full
> initialization buffer will always be entirely read and processed when using
> the auto+nio+ssl transport. ) This only applies to OpenWire and AMQP.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact