src/server/daemon/httplistener.c

changeset 444
96d2ba2f28db
parent 441
797aeb31a2c6
child 445
834351da593b
--- 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;
 }

mercurial