[ 
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. ) 

  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.


> 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
>
>
> 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 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


Reply via email to