--- 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; }