Bug 410551

Summary: c++ client deadlock
Product: Red Hat Enterprise MRG Reporter: Alan Conway <aconway>
Component: qpid-cppAssignee: Gordon Sim <gsim>
Status: CLOSED CURRENTRELEASE QA Contact: Kim van der Riet <kim.vdriet>
Severity: high Docs Contact:
Priority: urgent    
Version: beta   
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Alan Conway 2007-12-04 16:20:07 UTC
Description of problem: 

If Session_0_10::run() is running and sends an ack concurrently with a user
thread sending an AMQP command, the threads can deadlock.

How reproducible: easy


Steps to Reproduce:
 Write a test using default ack policy
 Run the dispatcher via session.start()
 Subscribe a listener to some queue.
 Send messages to the same queue in a loop.
  
Actual results:
 Deadlock.

Comment 1 Alan Conway 2008-02-05 20:48:43 UTC
Attempted to reproduce with SubscriptionManager in
src/tests/ClientSessionTest.cpp testSendToSelf, no deadlock. Unless the bug can
be reproduced with another test, this should be closed.

Comment 2 Gordon Sim 2008-02-11 13:12:18 UTC
Altered (and disabled) testSendToSelf such that sending and acking does actually
occur concurrently. Bug can be reproduced.

Comment 3 Gordon Sim 2008-05-01 08:05:27 UTC
Re-enabled testSendToSelf. This runs successfully with the original 10,000 msg
count both under valgrind and standalone. However under valgrind that number of
messages takes a *very* long time so I have cut the count back to 1000 for now.

This particular deadlock cannot exist anymore as the ExecutionHandler and
SessionCore have been merged.

Comment 4 Mike Bonnet 2008-05-16 15:07:58 UTC
qpidc-0.2.656926-1.el5 and qpidd-0.2.656926-1.el5 have been pushed to the staging repo for testing