From 29066a4d863c0402884fe4587146e4162fb45fda Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 25 Feb 2009 02:39:21 +0000 Subject: [PATCH] 2563. [bug] Dig could leak a socket causing it to wait forever to exit. [RT #19359] --- CHANGES | 3 +++ bin/dig/dighost.c | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 258ec98c1d..4d1b75a4db 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2563. [bug] Dig could leak a socket causing it to wait forever + to exit. [RT #19359] + 2561. [doc] Add isc-config.sh(1) man page. [RT #16378] 2560. [bug] Add #include to iptable.c. [RT #18258] diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 0d38918ff2..470261cb2d 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.7 2009/01/20 05:04:24 marka Exp $ */ +/* $Id: dighost.c,v 1.311.70.8 2009/02/25 02:39:21 marka Exp $ */ /*! \file * \note @@ -2396,8 +2396,14 @@ 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 + else { + 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)); + } UNLOCK_LOOKUP; return; }