Uploaded image for project: 'Qpid'
  1. Qpid
  2. QPID-2968

Blocking on dead sockets

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 0.7, 0.8, 0.9, Future
    • None
    • Python Client
    • Does not matter

    Description

      • 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
        connections.
      • 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.

      Attachments

        1. patch
          8 kB
          Dmitry Konishchev

        Activity

          People

            rhs Rafael H. Schloming
            konishchev Dmitry Konishchev
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: