mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Don't retry close() syscalls after an EINTR errors.
http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2019q1/012953.html
This commit is contained in:
@@ -552,7 +552,7 @@ int main (int argc, char **argv)
|
|||||||
char *msg;
|
char *msg;
|
||||||
|
|
||||||
/* close our copy of write-end */
|
/* close our copy of write-end */
|
||||||
while (retry_send(close(err_pipe[1])));
|
close(err_pipe[1]);
|
||||||
|
|
||||||
/* check for errors after the fork */
|
/* check for errors after the fork */
|
||||||
if (read_event(err_pipe[0], &ev, &msg))
|
if (read_event(err_pipe[0], &ev, &msg))
|
||||||
@@ -561,7 +561,7 @@ int main (int argc, char **argv)
|
|||||||
_exit(EC_GOOD);
|
_exit(EC_GOOD);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (retry_send(close(err_pipe[0])));
|
close(err_pipe[0]);
|
||||||
|
|
||||||
/* NO calls to die() from here on. */
|
/* NO calls to die() from here on. */
|
||||||
|
|
||||||
@@ -623,8 +623,7 @@ int main (int argc, char **argv)
|
|||||||
err = 1;
|
err = 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (retry_send(close(fd)));
|
if (close(fd) == -1)
|
||||||
if (errno != 0)
|
|
||||||
err = 1;
|
err = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -957,7 +956,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
/* finished start-up - release original process */
|
/* finished start-up - release original process */
|
||||||
if (err_pipe[1] != -1)
|
if (err_pipe[1] != -1)
|
||||||
while (retry_send(close(err_pipe[1])));
|
close(err_pipe[1]);
|
||||||
|
|
||||||
if (daemon->port != 0)
|
if (daemon->port != 0)
|
||||||
check_servers();
|
check_servers();
|
||||||
@@ -1483,7 +1482,7 @@ static void async_event(int pipe, time_t now)
|
|||||||
do {
|
do {
|
||||||
helper_write();
|
helper_write();
|
||||||
} while (!helper_buf_empty() || do_script_run(now));
|
} while (!helper_buf_empty() || do_script_run(now));
|
||||||
while (retry_send(close(daemon->helperfd)));
|
close(daemon->helperfd);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1728,7 +1727,7 @@ static void check_dns_listeners(time_t now)
|
|||||||
|
|
||||||
if (getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) == -1)
|
if (getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) == -1)
|
||||||
{
|
{
|
||||||
while (retry_send(close(confd)));
|
close(confd);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1793,7 +1792,7 @@ static void check_dns_listeners(time_t now)
|
|||||||
if (!client_ok)
|
if (!client_ok)
|
||||||
{
|
{
|
||||||
shutdown(confd, SHUT_RDWR);
|
shutdown(confd, SHUT_RDWR);
|
||||||
while (retry_send(close(confd)));
|
close(confd);
|
||||||
}
|
}
|
||||||
else if (!option_bool(OPT_DEBUG) && pipe(pipefd) == 0 && (p = fork()) != 0)
|
else if (!option_bool(OPT_DEBUG) && pipe(pipefd) == 0 && (p = fork()) != 0)
|
||||||
{
|
{
|
||||||
@@ -1812,7 +1811,7 @@ static void check_dns_listeners(time_t now)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (retry_send(close(confd)));
|
close(confd);
|
||||||
|
|
||||||
/* The child can use up to TCP_MAX_QUERIES ids, so skip that many. */
|
/* The child can use up to TCP_MAX_QUERIES ids, so skip that many. */
|
||||||
daemon->log_id += TCP_MAX_QUERIES;
|
daemon->log_id += TCP_MAX_QUERIES;
|
||||||
@@ -1858,7 +1857,7 @@ static void check_dns_listeners(time_t now)
|
|||||||
buff = tcp_request(confd, now, &tcp_addr, netmask, auth_dns);
|
buff = tcp_request(confd, now, &tcp_addr, netmask, auth_dns);
|
||||||
|
|
||||||
shutdown(confd, SHUT_RDWR);
|
shutdown(confd, SHUT_RDWR);
|
||||||
while (retry_send(close(confd)));
|
close(confd);
|
||||||
|
|
||||||
if (buff)
|
if (buff)
|
||||||
free(buff);
|
free(buff);
|
||||||
@@ -1867,7 +1866,7 @@ static void check_dns_listeners(time_t now)
|
|||||||
if (s->tcpfd != -1)
|
if (s->tcpfd != -1)
|
||||||
{
|
{
|
||||||
shutdown(s->tcpfd, SHUT_RDWR);
|
shutdown(s->tcpfd, SHUT_RDWR);
|
||||||
while (retry_send(close(s->tcpfd)));
|
close(s->tcpfd);
|
||||||
}
|
}
|
||||||
if (!option_bool(OPT_DEBUG))
|
if (!option_bool(OPT_DEBUG))
|
||||||
{
|
{
|
||||||
@@ -1943,7 +1942,7 @@ int icmp_ping(struct in_addr addr)
|
|||||||
gotreply = delay_dhcp(dnsmasq_time(), PING_WAIT, fd, addr.s_addr, id);
|
gotreply = delay_dhcp(dnsmasq_time(), PING_WAIT, fd, addr.s_addr, id);
|
||||||
|
|
||||||
#if defined(HAVE_LINUX_NETWORK) || defined(HAVE_SOLARIS_NETWORK)
|
#if defined(HAVE_LINUX_NETWORK) || defined(HAVE_SOLARIS_NETWORK)
|
||||||
while (retry_send(close(fd)));
|
close(fd);
|
||||||
#else
|
#else
|
||||||
opt = 1;
|
opt = 1;
|
||||||
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt));
|
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt));
|
||||||
|
|||||||
Reference in New Issue
Block a user