From 8af58d01240cb2b5325124c189b41112a94769df Mon Sep 17 00:00:00 2001 From: Michael Sauer Date: Sat, 12 Sep 2026 03:14:31 +0200 Subject: [PATCH] fix: HTTP-Server-Heartbeat auch im Fehlerpfad ticken MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Schlägt socket(), bind() oder listen() fehl, schlief die äußere Schleife eine Sekunde und versuchte es erneut, ohne nl_http_beat zu erhöhen. Da app_task den Watchdog nur füttert, wenn alle drei Heartbeats vorankommen, resettete der Chip nach 20 s, bootete, scheiterte wieder - dauerhaft. Der Retry selbst ist die Fehlerbehandlung, nicht der Reboot. --- src/net/nl_http_server.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/net/nl_http_server.c b/src/net/nl_http_server.c index 89e7cf0..9eb7020 100644 --- a/src/net/nl_http_server.c +++ b/src/net/nl_http_server.c @@ -96,6 +96,11 @@ static void server_task(void *arg) if (ls < 0 || bind(ls, (struct sockaddr *)&addr, sizeof addr) != 0 || listen(ls, 4) != 0) { if (ls >= 0) closesocket(ls); + /* I4: keep the heartbeat ticking while retrying. app_task only feeds the watchdog + * once all three heartbeats moved, so without this a failing socket()/bind()/listen() + * (e.g. no netif yet, or lwIP temporarily out of memory) would reset the chip after + * 20 s, boot, fail again - forever. The retry itself is the recovery, not a reboot. */ + nl_http_beat++; tls_os_time_delay(HZ); continue; }