Thorough clean-up following 8270648da1.

This commit is contained in:
Simon Kelley
2020-06-20 22:30:12 +01:00
parent 8270648da1
commit e2cb655958

View File

@@ -1864,15 +1864,6 @@ static void check_dns_listeners(time_t now)
else
{
int i;
for (i = 0; i < MAX_PROCS; i++)
if (daemon->tcp_pids[i] == 0 && daemon->tcp_pipes[i] == -1)
{
char a;
(void)a; /* suppress potential unused warning */
daemon->tcp_pids[i] = p;
daemon->tcp_pipes[i] = pipefd[0];
#ifdef HAVE_LINUX_NETWORK
/* The child process inherits the netlink socket,
which it never uses, but when the parent (us)
@@ -1887,8 +1878,16 @@ static void check_dns_listeners(time_t now)
single byte comes back up the pipe, which
is sent by the child after it has closed the
netlink socket. */
while(retry_send(read(pipefd[0], &a, 1)));
unsigned char a;
read_write(pipefd[0], &a, 1, 1);
#endif
for (i = 0; i < MAX_PROCS; i++)
if (daemon->tcp_pids[i] == 0 && daemon->tcp_pipes[i] == -1)
{
daemon->tcp_pids[i] = p;
daemon->tcp_pipes[i] = pipefd[0];
break;
}
}
@@ -1920,16 +1919,16 @@ static void check_dns_listeners(time_t now)
terminate the process. */
if (!option_bool(OPT_DEBUG))
{
char a = 0;
(void)a; /* suppress potential unused warning */
#ifdef HAVE_LINUX_NETWORK
/* See comment above re: netlink socket. */
unsigned char a = 0;
close(daemon->netlinkfd);
read_write(pipefd[1], &a, 1, 0);
#endif
alarm(CHILD_LIFETIME);
close(pipefd[0]); /* close read end in child. */
daemon->pipe_to_parent = pipefd[1];
#ifdef HAVE_LINUX_NETWORK
/* See comment above re netlink socket. */
close(daemon->netlinkfd);
while(retry_send(write(pipefd[1], &a, 1)));
#endif
}
/* start with no upstream connections. */
@@ -1956,8 +1955,10 @@ static void check_dns_listeners(time_t now)
shutdown(s->tcpfd, SHUT_RDWR);
close(s->tcpfd);
}
if (!option_bool(OPT_DEBUG))
{
close(daemon->pipe_to_parent);
flush_log();
_exit(0);
}