qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dmitry Konishchev <konishc...@gmail.com>
Subject [python-qpid] Blocking on dead sockets
Date Wed, 01 Dec 2010 12:18:41 GMT
Hi! I use python-qpid and I have faced with a few bugs in it:

* If you open a few connections, and one of them breaks (for example,
  due to a network error), another connections can be locked for time, which is
  equal to network timeout of the broken connection. This happens due to
  working with sockets in blocking mode and due to using one Selector for all
* All connections could become locked forever due to races between
  Driver and Selector objects. Driver object removes itself from the Selector
  non-atomically and a situation when Driver is alredy closed, but the Selector
  refers to it could happen. In this case select() call in the Selector raise
  an exeption due to self._transport.fileno() call on Driver where
  self._transport is None. The selector doesn't handle errors on select(), so
  the selector's thread will be stopped due to unhandled Exception.
* There is no checks on EINTR error on os.* calls.

As a temporary solution for me, I've written a patch, which fixes the errors:

It would be good if you'd include this patch to a new version of Qpid.

Dmitry Konishchev

Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org

View raw message