From: Evan Hunt Date: Tue, 10 Nov 2009 17:27:13 +0000 (+0000) Subject: 2757. [bug] dig: assertion failure could occur in connect X-Git-Tag: v9.6.1-P2~2^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13de8b7015b43153491d12efb707530ff555a1fb;p=thirdparty%2Fbind9.git 2757. [bug] dig: assertion failure could occur in connect timeout. [RT #20599] --- diff --git a/CHANGES b/CHANGES index d323230208b..1f31b1e5f57 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2757. [bug] dig: assertion failure could occur in connect + timeout. [RT #20599] + 2755. [doc] Clarify documentation of keyset- files in dnssec-signzone man page. [RT #19810] diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index bb913ad4e1b..d730c0ee5f3 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dighost.c,v 1.311.70.10 2009/11/05 01:57:29 each Exp $ */ +/* $Id: dighost.c,v 1.311.70.11 2009/11/10 17:27:13 each Exp $ */ /*! \file * \note @@ -2398,14 +2398,10 @@ connect_timeout(isc_task_t *task, isc_event_t *event) { cq = query->lookup->current_query; if (!l->tcp_mode) send_udp(ISC_LIST_NEXT(cq, link)); - else if (query->sock != NULL) { - isc_socket_cancel(query->sock, NULL, - ISC_SOCKCANCEL_ALL); - isc_socket_detach(&query->sock); - sockcount--; - debug("sockcount=%d", sockcount); - send_tcp_connect(ISC_LIST_NEXT(cq, link)); - } else { + else { + if (query->sock != NULL) + isc_socket_cancel(query->sock, NULL, + ISC_SOCKCANCEL_ALL); send_tcp_connect(ISC_LIST_NEXT(cq, link)); } UNLOCK_LOOKUP; @@ -2609,8 +2605,8 @@ connect_done(isc_task_t *task, isc_event_t *event) { if (sevent->result == ISC_R_CANCELED) { debug("in cancel handler"); isc_socket_detach(&query->sock); + INSIST(sockcount > 0); sockcount--; - INSIST(sockcount >= 0); debug("sockcount=%d", sockcount); query->waiting_connect = ISC_FALSE; isc_event_free(&event);