diff options
author | Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | 2019-03-09 08:40:57 +0000 |
---|---|---|
committer | Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | 2019-07-25 12:23:46 +0100 |
commit | e9eec39aacde450ba87598d85987b374ce6aed95 (patch) | |
tree | 3823546edc4d7228951ea9e37f55f6fea3f06833 /package/network/services/dnsmasq/patches/0050-Don-t-retry-close-syscalls-after-an-EINTR-errors.patch | |
parent | 7d684b7673a7cb4f3fef366dd4f621f62fc4019c (diff) | |
download | upstream-e9eec39aacde450ba87598d85987b374ce6aed95.tar.gz upstream-e9eec39aacde450ba87598d85987b374ce6aed95.tar.bz2 upstream-e9eec39aacde450ba87598d85987b374ce6aed95.zip |
dnsmasq: backport latest patches
Backport upstream patches pre 2.81rc for testing purposes.
Let's see what falls out!
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Diffstat (limited to 'package/network/services/dnsmasq/patches/0050-Don-t-retry-close-syscalls-after-an-EINTR-errors.patch')
-rw-r--r-- | package/network/services/dnsmasq/patches/0050-Don-t-retry-close-syscalls-after-an-EINTR-errors.patch | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/package/network/services/dnsmasq/patches/0050-Don-t-retry-close-syscalls-after-an-EINTR-errors.patch b/package/network/services/dnsmasq/patches/0050-Don-t-retry-close-syscalls-after-an-EINTR-errors.patch new file mode 100644 index 0000000000..148f15720a --- /dev/null +++ b/package/network/services/dnsmasq/patches/0050-Don-t-retry-close-syscalls-after-an-EINTR-errors.patch @@ -0,0 +1,113 @@ +From 5fc639cf9a9aafd3a2b50570808a74a4ee5cd12a Mon Sep 17 00:00:00 2001 +From: Simon Kelley <simon@thekelleys.org.uk> +Date: Fri, 29 Mar 2019 21:29:43 +0000 +Subject: [PATCH 50/57] Don't retry close() syscalls after an EINTR errors. + +http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2019q1/012953.html +Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> +--- + src/dnsmasq.c | 23 +++++++++++------------ + 1 file changed, 11 insertions(+), 12 deletions(-) + +--- a/src/dnsmasq.c ++++ b/src/dnsmasq.c +@@ -552,7 +552,7 @@ int main (int argc, char **argv) + char *msg; + + /* close our copy of write-end */ +- while (retry_send(close(err_pipe[1]))); ++ close(err_pipe[1]); + + /* check for errors after the fork */ + if (read_event(err_pipe[0], &ev, &msg)) +@@ -561,7 +561,7 @@ int main (int argc, char **argv) + _exit(EC_GOOD); + } + +- while (retry_send(close(err_pipe[0]))); ++ close(err_pipe[0]); + + /* NO calls to die() from here on. */ + +@@ -623,8 +623,7 @@ int main (int argc, char **argv) + err = 1; + else + { +- while (retry_send(close(fd))); +- if (errno != 0) ++ if (close(fd) == -1) + err = 1; + } + } +@@ -957,7 +956,7 @@ int main (int argc, char **argv) + + /* finished start-up - release original process */ + if (err_pipe[1] != -1) +- while (retry_send(close(err_pipe[1]))); ++ close(err_pipe[1]); + + if (daemon->port != 0) + check_servers(); +@@ -1483,7 +1482,7 @@ static void async_event(int pipe, time_t + do { + helper_write(); + } while (!helper_buf_empty() || do_script_run(now)); +- while (retry_send(close(daemon->helperfd))); ++ close(daemon->helperfd); + } + #endif + +@@ -1728,7 +1727,7 @@ static void check_dns_listeners(time_t n + + if (getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) == -1) + { +- while (retry_send(close(confd))); ++ close(confd); + continue; + } + +@@ -1793,7 +1792,7 @@ static void check_dns_listeners(time_t n + if (!client_ok) + { + shutdown(confd, SHUT_RDWR); +- while (retry_send(close(confd))); ++ close(confd); + } + else if (!option_bool(OPT_DEBUG) && pipe(pipefd) == 0 && (p = fork()) != 0) + { +@@ -1812,7 +1811,7 @@ static void check_dns_listeners(time_t n + break; + } + } +- while (retry_send(close(confd))); ++ close(confd); + + /* The child can use up to TCP_MAX_QUERIES ids, so skip that many. */ + daemon->log_id += TCP_MAX_QUERIES; +@@ -1858,7 +1857,7 @@ static void check_dns_listeners(time_t n + buff = tcp_request(confd, now, &tcp_addr, netmask, auth_dns); + + shutdown(confd, SHUT_RDWR); +- while (retry_send(close(confd))); ++ close(confd); + + if (buff) + free(buff); +@@ -1867,7 +1866,7 @@ static void check_dns_listeners(time_t n + if (s->tcpfd != -1) + { + shutdown(s->tcpfd, SHUT_RDWR); +- while (retry_send(close(s->tcpfd))); ++ close(s->tcpfd); + } + 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); + + #if defined(HAVE_LINUX_NETWORK) || defined(HAVE_SOLARIS_NETWORK) +- while (retry_send(close(fd))); ++ close(fd); + #else + opt = 1; + setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt)); |