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]