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

Blocking on dead sockets

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: Future, 0.7, 0.8, 0.9
    • Fix Version/s: None
    • Component/s: Python Client
    • Labels:
    • Environment:

      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

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

              Dates

              • Created:
                Updated: