# HG changeset patch # User Olaf Wintermann <olaf.wintermann@gmail.com> # Date 1738180291 -3600 # Node ID 0fa595aefd0ff335328dc67a3c5fdb9c936abcd0 # Parent f95868a8ec37fe32e7d83d83f87d0ca7a2380502 shutdown acceptor threads on ws shutdown diff -r f95868a8ec37 -r 0fa595aefd0f src/server/daemon/configmanager.c --- a/src/server/daemon/configmanager.c Wed Jan 29 20:40:19 2025 +0100 +++ b/src/server/daemon/configmanager.c Wed Jan 29 20:51:31 2025 +0100 @@ -87,6 +87,15 @@ return 0; } +int cfgmgr_shutdown(void) { + // TODO: this is not threadsafe!!! + + CxIterator i = cxListIterator(current_config->listeners); + cx_foreach(HttpListener*, ls, i) { + http_listener_shutdown_acceptors(ls); + } +} + ServerConfiguration *cfgmgr_get_server_config() { return current_config; } diff -r f95868a8ec37 -r 0fa595aefd0f src/server/daemon/configmanager.h --- a/src/server/daemon/configmanager.h Wed Jan 29 20:40:19 2025 +0100 +++ b/src/server/daemon/configmanager.h Wed Jan 29 20:51:31 2025 +0100 @@ -51,6 +51,8 @@ ServerConfiguration* cfgmgr_get_server_config(); +int cfgmgr_shutdown(void); + #ifdef __cplusplus } diff -r f95868a8ec37 -r 0fa595aefd0f src/server/daemon/httplistener.c --- a/src/server/daemon/httplistener.c Wed Jan 29 20:40:19 2025 +0100 +++ b/src/server/daemon/httplistener.c Wed Jan 29 20:51:31 2025 +0100 @@ -552,7 +552,8 @@ // we do it mostly for nicer log messages. The timeout is there // for making sure, this function never blocks forever. struct timespec ts; - ts.tv_sec = time(NULL) + 60; + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += 60; pthread_cond_timedwait(&listener->shutdown_cond, &listener->shutdown_mutex, &ts); pthread_mutex_unlock(&listener->shutdown_mutex); diff -r f95868a8ec37 -r 0fa595aefd0f src/server/daemon/webserver.c --- a/src/server/daemon/webserver.c Wed Jan 29 20:40:19 2025 +0100 +++ b/src/server/daemon/webserver.c Wed Jan 29 20:51:31 2025 +0100 @@ -290,6 +290,7 @@ re = re->next; } + cfgmgr_shutdown(); shutdown_threadpools(60); shutdown_eventhandlers_wait();