From 64920538fc19f3c7f94dfa1e84a9a6569b8c3d37 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Fri, 12 May 2017 09:57:15 +0200 Subject: [PATCH] BUG/MAJOR: dns: Broken kqueue events handling (BSD systems). Some DNS related network sockets were closed without unregistering their file descriptors from their underlying kqueue event sets. This patch replaces calls to close() by fd_delete() calls to that to delete such events attached to DNS network sockets from the kqueue before closing the sockets. The bug was introduced by commit 26c6eb8 ("BUG/MAJOR: dns: restart sockets after fork()") which was backported in 1.7 so this fix has to be backported there as well. Thanks to Jim Pingle who reported it and indicated the faulty commit, and to Lukas Tribus for the trace showing the bad file descriptor. --- src/dns.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dns.c b/src/dns.c index a118598f93..cb0a9a95d5 100644 --- a/src/dns.c +++ b/src/dns.c @@ -1004,7 +1004,7 @@ int dns_init_resolvers(int close_socket) if (close_socket == 1) { if (curnameserver->dgram) { - close(curnameserver->dgram->t.sock.fd); + fd_delete(curnameserver->dgram->t.sock.fd); memset(curnameserver->dgram, '\0', sizeof(*dgram)); dgram = curnameserver->dgram; } -- 2.47.2