From 63e4529effec466e9aeb57c40814a82ba700a97a Mon Sep 17 00:00:00 2001 From: Kroese Date: Sat, 25 Jul 2026 13:47:20 +0200 Subject: [PATCH] fix: Add cleanup for failed web server startup (#1333) --- src/server.sh | 64 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/src/server.sh b/src/server.sh index 3a5bcb9..f881e0e 100644 --- a/src/server.sh +++ b/src/server.sh @@ -15,7 +15,7 @@ WSD_PID="$QEMU_DIR/websocketd.pid" prepareWebFiles() { cp -r /var/www/* "$QEMU_DIR" || return 1 - rm -f "$WSD_PID" "$WEB_PID" "$WSD_LOG" || return 1 + rm -f -- "$WSD_PID" "$WEB_PID" "$WSD_LOG" || return 1 return 0 } @@ -60,6 +60,22 @@ configureWebServer() { return 0 } +stopWebServer() { + + local pid + + if [ -s "$WEB_PID" ] && read -r pid < "$WEB_PID" && [ -n "$pid" ]; then + pKill "$pid" 2 + + if isAlive "$pid"; then + kill -9 -- "$pid" 2>/dev/null || : + fi + fi + + rm -f -- "$WEB_PID" + return 0 +} + startWebServer() { # Start webserver @@ -68,6 +84,22 @@ startWebServer() { return 0 } +stopWebsocketServer() { + + local pid + + if [ -s "$WSD_PID" ] && read -r pid < "$WSD_PID" && [ -n "$pid" ]; then + pKill "$pid" 2 + + if isAlive "$pid"; then + kill -9 -- "$pid" 2>/dev/null || : + fi + fi + + rm -f -- "$WSD_PID" + return 0 +} + startWebsocketServer() { # Start websocket server @@ -81,17 +113,23 @@ startWebsocketServer() { if ! echo "$pid" > "$WSD_PID"; then kill "$pid" 2>/dev/null || : + rm -f -- "$WSD_PID" return 1 fi - sleep 0.1 + local i + for (( i = 1; i <= 5; i++ )); do - if ! isAlive "$pid"; then - rm -f "$WSD_PID" - [ -s "$WSD_LOG" ] && cat "$WSD_LOG" >&2 - error "Failed to start websocket server!" - return 1 - fi + if ! isAlive "$pid"; then + rm -f -- "$WSD_PID" + [ -s "$WSD_LOG" ] && cat "$WSD_LOG" >&2 + error "Failed to start websocket server!" + return 1 + fi + + sleep 0.1 + + done return 0 } @@ -104,7 +142,11 @@ disabled "${WEB:-}" && return 0 configureWebServer -startWebServer -startWebsocketServer +if startWebServer && startWebsocketServer; then + return 0 +fi -return 0 +stopWebsocketServer || : +stopWebServer || : + +return 1