Skip to content
  • Michał Kępień's avatar
    Fix cleanup upon an error before TCP socket creation · 13975b32
    Michał Kępień authored
    When a query times out after a socket is created and associated with a
    given dig_query_t structure, calling isc_socket_cancel() causes
    connect_done() to be run, which in turn takes care of all necessary
    cleanups.  However, certain errors (e.g. get_address() returning
    ISC_R_FAMILYNOSUPPORT) may prevent a TCP socket from being created in
    the first place.  Since force_timeout() may be used in code handling
    such errors, connect_timeout() needs to properly clean up a TCP query
    which is not associated with any socket.  Call clear_query() from
    connect_timeout() after attempting to send a TCP query to the next
    available server if the timed out query does not have a socket
    associated with it, in order to prevent dig from hanging indefinitely
    due to the dig_query_t structure not being detached from its parent
    dig_lookup_t structure.
    13975b32