src/server/daemon/httplistener.c

changeset 577
4f5ccaea4a92
parent 571
0fa595aefd0f
child 579
e10457d74fe1
--- a/src/server/daemon/httplistener.c	Fri Jan 31 21:27:54 2025 +0100
+++ b/src/server/daemon/httplistener.c	Sat Feb 01 09:23:14 2025 +0100
@@ -77,16 +77,25 @@
 
 static pthread_mutex_t listener_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+static void wssocket_free(WSSocket *s) {
+    close(s->socket);
+    free(s);
+}
 
 int http_listener_global_init(void) {
     listener_socket_map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 4);
     if(!listener_socket_map) {
         return 1;
     }
+    listener_socket_map->simple_destructor = (cx_destructor_func)wssocket_free;
     
     return 0;
 }
 
+void http_listener_global_shutdown(void) {
+    cxMapDestroy(listener_socket_map);
+}
+
 int start_all_listener() {
     ServerConfiguration *conf = cfgmgr_get_server_config();
     CxList *ls = conf->listeners;
@@ -428,6 +437,9 @@
     if(listener->shutdown) {
         pthread_mutex_destroy(&listener->shutdown_mutex);
         pthread_cond_destroy(&listener->shutdown_cond);
+        
+        free(listener->acceptors);
+        free(listener->acceptors6);
     }
 }
 
@@ -556,6 +568,7 @@
     ts.tv_sec += 60;
     pthread_cond_timedwait(&listener->shutdown_cond, &listener->shutdown_mutex, &ts);
     
+
     pthread_mutex_unlock(&listener->shutdown_mutex);
 }
 
@@ -677,7 +690,6 @@
         
         // create Connection object
         Connection *conn = malloc(sizeof(Connection));
-        uint32_t conn_id;
         RAND_bytes((unsigned char*)&conn->id, sizeof(conn->id));
         conn->id <<= 16;
         conn->address = ca;
@@ -759,6 +771,8 @@
     
     cfg_unref(acceptor->listener->cfg);
     
+    free(acceptor);
+    
     return NULL;
 }
 

mercurial