# 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();