Marek Laca created QPID-8536:
--------------------------------

             Summary: [Broker-J] Incorrect check of maximum open connections
                 Key: QPID-8536
                 URL: https://issues.apache.org/jira/browse/QPID-8536
             Project: Qpid
          Issue Type: Bug
          Components: Broker-J
            Reporter: Marek Laca


The AMQP port has the limit of maximum open connections. But this limit is not 
checked correctly. The AMQP port has two methods 
AmqpPort::canAcceptNewConnection and AmqpPort::incrementConnectionCount.

Suppose that the port has the limit 5 connection and clients open 7 connections 
at the same time:
 # 7 parallel connections is open by IO-threads.
 # All threads call the AmqpPort::canAcceptNewConnection method and every 
thread receive the positive answer because any connection has not been 
registered yet.
 # All threads call the AmqpPort::incrementConnectionCount methods. Hence the 
connection count is increased to 7 what breaks the limits.
 # All 7 connections are accepted in spite of breaking limit.

The every thread can see the intermediate state of the counter when the limit 
is checked by another thread but the counter has not been incremented yet.
 The solution is the combination of the steps 'check' and 'increment' into 
single atomic operation when every thread has the exclusive access to the 
counter. The counter can be observed only in two states: 'before check' or 
'after incrementation'.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to