From b89394cb629eb123af24765f1b20adba4a10ade2 Mon Sep 17 00:00:00 2001 From: Fiona Klute Date: Fri, 31 May 2024 20:53:28 +0200 Subject: [PATCH] package/dnsmasq: Fix init script restart command Restarting dnsmasq can cause constant issues: stop works, but start fails because the new instance can't bind the socket. Another restart immediately after works just fine: # /etc/init.d/S80dnsmasq restart Stopping dnsmasq: OK Starting dnsmasq: dnsmasq: failed to create listening socket for 192.168.128.1: Address in use FAIL # /etc/init.d/S80dnsmasq restart Stopping dnsmasq: FAIL Starting dnsmasq: OK Solve this by waiting for process to actually stop before returning from the stop command. Clean up the PID file after to avoid potential issues with the PID being reused after stop. The wait could also be placed inside the restart block, but putting it into the stop block has the advantage that it also avoids similar issues for any other callers. Signed-off-by: Fiona Klute [yann.morin.1998@free.fr: - fix shellcheck - reflow commit log ] Signed-off-by: Yann E. MORIN (cherry picked from commit 507caef3ddf5ab7d933e14303508db057c4b9501) Signed-off-by: Peter Korsgaard --- .checkpackageignore | 1 - package/dnsmasq/S80dnsmasq | 9 +++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.checkpackageignore b/.checkpackageignore index 536788f5ea..b3d2d6d8d5 100644 --- a/.checkpackageignore +++ b/.checkpackageignore @@ -307,7 +307,6 @@ package/dmalloc/0004-Makefile-use-the-configure-detected-or-user-supplied.patch package/dmalloc/0005-configure-use-LD-instead-of-hard-coding-ld.patch Upstream package/dmraid/0001-fix-compilation-under-musl.patch Upstream package/dmraid/S20dmraid Variables -package/dnsmasq/S80dnsmasq Shellcheck package/docker-engine/S60dockerd Indent Shellcheck Variables package/docopt-cpp/0001-only-build-one-target-use-BUILD_SHARED_LIBS-where-appropriate.patch Upstream package/domoticz/S99domoticz Shellcheck diff --git a/package/dnsmasq/S80dnsmasq b/package/dnsmasq/S80dnsmasq index 175daf9d26..f1e1a68585 100644 --- a/package/dnsmasq/S80dnsmasq +++ b/package/dnsmasq/S80dnsmasq @@ -10,12 +10,21 @@ case "$1" in printf "Starting dnsmasq: " start-stop-daemon -S -p "$PIDFILE" -x "/usr/sbin/$DAEMON" -- \ --pid-file="$PIDFILE" + # shellcheck disable=SC2181 [ $? = 0 ] && echo "OK" || echo "FAIL" ;; stop) printf "Stopping dnsmasq: " start-stop-daemon -K -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" + # shellcheck disable=SC2181 [ $? = 0 ] && echo "OK" || echo "FAIL" + # wait for dnsmasq process to be gone + while true; do + pid="$( cat "${PIDFILE}" 2>/dev/null || true )" + { [ -n "${pid}" ] && [ -d "/proc/${pid}" ]; } || break + sleep 0.1 + done + rm -f "$PIDFILE" ;; restart|reload) $0 stop