C++ broker can deadlock when processing a bind.
-----------------------------------------------
Key: QPID-2507
URL: https://issues.apache.org/jira/browse/QPID-2507
Project: Qpid
Issue Type: Bug
Components: C++ Broker
Environment: c++ broker on linux.
Reporter: Ken Giusti
Rarely happens, but I was lucky enough to catch this on the debugger.
Broker locks due to lock inversion. Here's the flow:
thread 1 (broker):
1) gets bind request for the management topic exchange
2) binds to the management topic exchange [takes topic->lock]
3) attempts to call management agent allocId() [takes mgmt agent->userLock]
At the same time:
thread 4 (mgmt agent periodic timer)
1) periodic processing [takes mgmt agent->userLock]
2) call topicexchange::route() [takes topic->lock]
thread one holds the topic->lock, tries to take mgmt agent->userLock
thread four holds mgmt agent->userLock, tries to take topic->lock
deadlock.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]