From 2f71e023db36975cbcd24e8ba8c7a94eb9de6942 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 20 Jan 2024 07:53:00 +1100 Subject: [PATCH] AP_Bootloader: added cleanup of web server threads --- Tools/AP_Bootloader/network.cpp | 15 +++++++++++++++ Tools/AP_Bootloader/network.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/Tools/AP_Bootloader/network.cpp b/Tools/AP_Bootloader/network.cpp index 3cacc529c2..2a78b199a9 100644 --- a/Tools/AP_Bootloader/network.cpp +++ b/Tools/AP_Bootloader/network.cpp @@ -539,7 +539,14 @@ void BL_Network::net_request_trampoline(void *ctx) { auto *req = (req_context *)ctx; req->driver->handle_request(req->sock); + + auto *driver = req->driver; + auto *thd = chThdGetSelfX(); delete req; + + WITH_SEMAPHORE(driver->web_delete_mtx); + thd->delete_next = driver->web_delete_list; + driver->web_delete_list = thd; } /* @@ -574,6 +581,14 @@ void BL_Network::web_server(void) 60, net_request_trampoline, req); + + // cleanup any finished threads + WITH_SEMAPHORE(web_delete_mtx); + while (web_delete_list != nullptr) { + auto *thd = web_delete_list; + web_delete_list = thd->delete_next; + chThdRelease(thd); + } } } diff --git a/Tools/AP_Bootloader/network.h b/Tools/AP_Bootloader/network.h index 599724e785..f7f55eebeb 100644 --- a/Tools/AP_Bootloader/network.h +++ b/Tools/AP_Bootloader/network.h @@ -19,6 +19,9 @@ private: struct netif *thisif; thread_t *net_thread_ctx; + HAL_Semaphore web_delete_mtx; + thread_t *web_delete_list; + static void net_thread_trampoline(void*); static void web_server_trampoline(void*);