mirror of
https://github.com/isc-projects/bind9.git
synced 2026-04-23 15:17:01 -04:00
2067. [bug] 'rndc' could close the socket too early triggering
a INSIST under Windows. [RT #16317]
This commit is contained in:
parent
e2bec76b0a
commit
09e36e1b91
3 changed files with 19 additions and 8 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,6 +1,9 @@
|
|||
|
||||
--- 9.3.3rc1 released ---
|
||||
|
||||
2067. [bug] 'rndc' could close the socket too early triggering
|
||||
a INSIST under Windows. [RT #16317]
|
||||
|
||||
2065. [bug] libbind: probe for HPUX prototypes for
|
||||
endprotoent_r() and endservent_r(). [RT 16313]
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rndc.c,v 1.77.2.5.2.18 2006/07/20 03:48:05 marka Exp $ */
|
||||
/* $Id: rndc.c,v 1.77.2.5.2.19 2006/08/04 03:03:08 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Principal Author: DCL
|
||||
|
|
@ -154,6 +154,11 @@ rndc_senddone(isc_task_t *task, isc_event_t *event) {
|
|||
if (sevent->result != ISC_R_SUCCESS)
|
||||
fatal("send failed: %s", isc_result_totext(sevent->result));
|
||||
isc_event_free(&event);
|
||||
if (sends == 0 && recvs == 0) {
|
||||
isc_socket_detach(&sock);
|
||||
isc_task_shutdown(task);
|
||||
RUNTIME_CHECK(isc_app_shutdown() == ISC_R_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -204,9 +209,11 @@ rndc_recvdone(isc_task_t *task, isc_event_t *event) {
|
|||
|
||||
isc_event_free(&event);
|
||||
isccc_sexpr_free(&response);
|
||||
isc_socket_detach(&sock);
|
||||
isc_task_shutdown(task);
|
||||
RUNTIME_CHECK(isc_app_shutdown() == ISC_R_SUCCESS);
|
||||
if (sends == 0 && recvs == 0) {
|
||||
isc_socket_detach(&sock);
|
||||
isc_task_shutdown(task);
|
||||
RUNTIME_CHECK(isc_app_shutdown() == ISC_R_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: socket.c,v 1.5.2.13.2.18 2006/01/07 00:23:33 marka Exp $ */
|
||||
/* $Id: socket.c,v 1.5.2.13.2.19 2006/08/04 03:03:08 marka Exp $ */
|
||||
|
||||
/* This code has been rewritten to take advantage of Windows Sockets
|
||||
* I/O Completion Ports and Events. I/O Completion Ports is ONLY
|
||||
|
|
@ -1695,14 +1695,15 @@ destroy_socket(isc_socket_t **sockp) {
|
|||
socket_log(sock, NULL, CREATION, isc_msgcat, ISC_MSGSET_SOCKET,
|
||||
ISC_MSG_DESTROYING, "destroying socket %d", sock->fd);
|
||||
|
||||
LOCK(&manager->lock);
|
||||
|
||||
LOCK(&sock->lock);
|
||||
|
||||
INSIST(ISC_LIST_EMPTY(sock->accept_list));
|
||||
INSIST(ISC_LIST_EMPTY(sock->recv_list));
|
||||
INSIST(ISC_LIST_EMPTY(sock->send_list));
|
||||
INSIST(sock->connect_ev == NULL);
|
||||
|
||||
LOCK(&manager->lock);
|
||||
|
||||
LOCK(&sock->lock);
|
||||
socket_close(sock);
|
||||
if (sock->pending_recv != 0 || sock->pending_send != 0 ||
|
||||
sock->pending_close != 0) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue