Bug 493016

Summary: Race condition in closing session due to exception
Product: Red Hat Enterprise MRG Reporter: Gordon Sim <gsim>
Component: qpid-cppAssignee: mick <mgoulish>
Status: CLOSED CURRENTRELEASE QA Contact: ppecka <ppecka>
Severity: medium Docs Contact:
Priority: urgent    
Version: 1.1CC: jross, ppecka
Target Milestone: 1.1.1   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2011-07-05 13:50:32 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
test case
none
patch for fix none

Description Gordon Sim 2009-03-31 11:06:49 UTC
If a Session object goes out of scope, the ConnectionImpl will throw a FramingErrorException for any frames received on the correspodning channel. 

This is in itself incorrect as the broker may not have ever been sent a detach. However it only causes a real problem when a session is closed due to an exception. In this case the client receives an execution.exception command followed by a session.detach control. If the session goes out of scope between the processing of these two, the handling of the detach causes a FramingErrorException which causes the client to close the connection thus destroying all other active sessions.

Comment 1 Gordon Sim 2009-04-09 10:17:24 UTC
Created attachment 338884 [details]
test case

The attached test program creates several sessions on the same connection. Most of these are simply sending and receiving messages. One session periodically executes a command that will cause a SessionException.

Correct behaviour is for the test to end and report that all clients completed successfully (and the test returns 0).

The bug reported here results in exceptions of the following type:

Failed: framing-error: not-attached: Invalid channel: 32 (qpid/client/ConnectionImpl.cpp:115)

And the test then returns a non-zero value.

Comment 2 Gordon Sim 2009-04-09 10:19:15 UTC
Fixed as r762312 on qpids 0.5 branch and as r763163 on trunk.

Comment 3 Gordon Sim 2009-04-09 10:22:27 UTC
Created attachment 338885 [details]
patch for fix

This is the patch that fixes the above issue.

Comment 4 Gordon Sim 2009-04-17 17:56:31 UTC
Fixed in qpidc-0.5.752581-5.el5

Comment 5 Justin Ross 2011-06-28 19:22:06 UTC
Does this have test coverage?

Comment 6 ppecka 2011-07-02 00:11:40 UTC
Verified on rhel5.6 / rhel6.2 (i686/x86_64)

rpm -qa | grep qpid | sort -u
python-qpid-0.10-1.el5
python-qpid-qmf-0.10-10.el5
qpid-cpp-client-0.10-8.el5
qpid-cpp-client-devel-0.10-8.el5
qpid-cpp-client-devel-docs-0.10-8.el5
qpid-cpp-client-ssl-0.10-8.el5
qpid-cpp-server-0.10-8.el5
qpid-cpp-server-cluster-0.10-8.el5
qpid-cpp-server-devel-0.10-8.el5
qpid-cpp-server-ssl-0.10-8.el5
qpid-cpp-server-store-0.10-8.el5
qpid-cpp-server-xml-0.10-8.el5
qpid-java-client-0.10-6.el5
qpid-java-common-0.10-6.el5
qpid-java-example-0.10-6.el5
qpid-qmf-0.10-10.el5
qpid-qmf-devel-0.10-10.el5
qpid-tests-0.10-1.el5
qpid-tools-0.10-6.el5
rh-qpid-cpp-tests-0.10-8.el5

--> VERIFIED