[Buildroot] [git commit branch/2024.02.x] package/dnsmasq: Fix init script restart command
Peter Korsgaard
peter at korsgaard.com
Sat Jun 8 16:59:07 UTC 2024
commit: https://git.buildroot.net/buildroot/commit/?id=b89394cb629eb123af24765f1b20adba4a10ade2
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/2024.02.x
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 <fiona.klute+wiwa at gmx.de>
[yann.morin.1998 at free.fr:
- fix shellcheck
- reflow commit log
]
Signed-off-by: Yann E. MORIN <yann.morin.1998 at free.fr>
(cherry picked from commit 507caef3ddf5ab7d933e14303508db057c4b9501)
Signed-off-by: Peter Korsgaard <peter at korsgaard.com>
---
.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
More information about the buildroot
mailing list