diff -r ef3c8a0e1fee -r 96d2ba2f28db src/server/daemon/httplistener.c --- a/src/server/daemon/httplistener.c Sun Nov 27 13:33:30 2022 +0100 +++ b/src/server/daemon/httplistener.c Sun Nov 27 15:58:37 2022 +0100 @@ -367,7 +367,6 @@ } listener->nacceptors = conf->nacceptors; listener->port = conf->port; - listener->ref = 1; listener->next = NULL; listener->ssl = NULL; @@ -459,21 +458,6 @@ return 0; } -void http_listener_ref(HttpListener *listener) { - ws_atomic_inc32(&listener->ref); -} - -void http_listener_unref(HttpListener *listener) { - uint32_t ref = ws_atomic_dec32(&listener->ref); - if(ref == 0) { - log_ereport(LOG_VERBOSE, "HttpListener %s: destroy", listener->name.ptr); - free(listener->acceptors); - // TODO: unref cfg - // TODO: unref session handler - free(listener); - } -} - int http_listener_socket_eq(HttpListener *l1, HttpListener *l2) { if(l1->server_socket && l2->server_socket && l1->server_socket == l2->server_socket) { return TRUE; @@ -488,8 +472,6 @@ while(listener->next) { listener = listener->next; } - - http_listener_ref(next); listener->next = next; } @@ -502,6 +484,7 @@ } void acceptor_start(Acceptor *a) { + cfg_ref(a->listener->cfg); if(pthread_create( &a->tid, NULL, @@ -509,17 +492,19 @@ a) != 0) { log_ereport(LOG_FAILURE, "Listener %s: acceptor_start: %s", a->listener->name.ptr, strerror(errno)); + cfg_unref(a->listener->cfg); } } void* acceptor_thread(Acceptor *acceptor) { WS_ASSERT(acceptor); WS_ASSERT(acceptor->listener); + WS_ASSERT(acceptor->listener->cfg); WS_ASSERT(acceptor->listener->session_handler); WS_ASSERT(acceptor->listener->session_handler->enqueue_connection); HttpListener *listener = acceptor->listener; - + int server_socket; ConnectionAddr ca; @@ -614,10 +599,7 @@ } } - if(listener->next) { - http_listener_unref(listener->next); - } - http_listener_unref(listener); + cfg_unref(acceptor->listener->cfg); return NULL; }