Description of problem: Forking python qpid.messaging client crashes with qpid.messaging.exceptions.InternalError in driver.py:889 (KeyError: 'pop(): dictionary is empty') Forking client performs sending and receiving from both main process and forked process simultaneously. Client crashes with qpid.messaging.exceptions.InternalError while instantiating/creating sender object on session in the forked process. See details in Additional info section. The issue was seen on RHEL5.9 i686 and also x86_64. Version-Release number of selected component (if applicable): # rpm -qa | grep qpid | sort python-qpid-0.18-12.el5_10 python-qpid-qmf-0.18-24.el5_10 qpid-cpp-client-0.18-25.el5_10 qpid-cpp-client-devel-0.18-25.el5_10 qpid-cpp-client-devel-docs-0.18-25.el5_10 qpid-cpp-client-rdma-0.18-25.el5_10 qpid-cpp-client-ssl-0.18-25.el5_10 qpid-cpp-mrg-debuginfo-0.18-25.el5_10 qpid-cpp-server-0.18-25.el5_10 qpid-cpp-server-cluster-0.18-25.el5_10 qpid-cpp-server-devel-0.18-25.el5_10 qpid-cpp-server-ha-0.18-25.el5_10 qpid-cpp-server-rdma-0.18-25.el5_10 qpid-cpp-server-ssl-0.18-25.el5_10 qpid-cpp-server-store-0.18-25.el5_10 qpid-cpp-server-xml-0.18-25.el5_10 qpid-java-client-0.18-8.el5_9 qpid-java-common-0.18-8.el5_9 qpid-java-example-0.18-8.el5_9 qpid-jca-0.18-8.el5 qpid-jca-xarecovery-0.18-8.el5 qpid-jca-zip-0.18-8.el5 qpid-qmf-0.18-24.el5_10 qpid-qmf-debuginfo-0.18-24.el5_10 qpid-qmf-devel-0.18-24.el5_10 qpid-tests-0.18-2.el5 qpid-tools-0.18-10.el5_9 rh-qpid-cpp-tests-0.18-25.el5_10 ruby-qpid-qmf-0.18-24.el5_10 How reproducible: 100% Steps to Reproduce: 1. install qpidd 2. configure qpidd to auth=no 3. python /tmp/bz1098606.py Actual results: Forking client crashing with qpid.messaging.exceptions.InternalError. Expected results: Forking client should be functional and not be crashing. Additional info: [root@dhcp-x-y bz1098606]# service qpidd restart;python bz1098606.py ns Stopping Qpid AMQP daemon: [ OK ] Starting Qpid AMQP daemon: [ OK ] Entered pre_fork_ns() connected(pre_fork_ns) Message(properties={'x-amqp-0-10.routing-key': u'BZ1098606_pre_fork_ns'}, content='pre_fork_ns') Fork parent: 18533, child: 18535 Entered post_fork_main_ns() Entered post_fork_child_ns() connected(post_fork_main_ns) connected(post_fork_child_ns) Traceback (most recent call last): File "bz1098606.py", line 143, in ? main(); File "bz1098606.py", line 133, in main globals()[method_postfc](); File "bz1098606.py", line 110, in post_fork_child_ns S = s.sender(a); File "<string>", line 6, in sender File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 597, in sender sender._ewait(lambda: sender.linked) File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 804, in _ewait result = self.session._ewait(lambda: self.error or predicate(), timeout) File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 571, in _ewait Message(properties={'x-amqp-0-10.routing-key': u'BZ1098606_post_fork_main_ns'}, content='post_fork_main_ns') result = self.connection._ewait(lambda: self.error or predicate(), timeout) File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 214, in _ewait self.check_error() File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 207, in check_error raise self.error qpid.messaging.exceptions.InternalError: Traceback (most recent call last): File "/usr/lib/python2.4/site-packages/qpid/messaging/driver.py", line 671, in write op.dispatch(self) File "/usr/lib/python2.4/site-packages/qpid/ops.py", line 84, in dispatch getattr(target, handler)(self, *args) File "/usr/lib/python2.4/site-packages/qpid/messaging/driver.py", line 889, in do_session_detached sst = self._sessions.pop(dtc.channel) KeyError: 'pop(): dictionary is empty'
Created attachment 912464 [details] Forking client Forking client usage: * two modes, main & forking process code shared service qpidd restart;sleep 2;python bz1098606.py s * two modes, main & forking process code non-shared service qpidd restart;sleep 2;python bz1098606.py ns Both modes are about equivalent. It is expected to see bz1098606.py passing and not hanging. (Current el6/7 behavior)