]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
REORG: server: add a free server function
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 16 Mar 2021 16:20:15 +0000 (17:20 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 18 Mar 2021 14:37:05 +0000 (15:37 +0100)
Create a new server function named free_server. It can be used to
deallocate a server and its member.

include/haproxy/server.h
src/haproxy.c
src/server.c

index 0bcae854539265bca3d4d58951c4ecd423bf79e3..518c20a0ff50591f23a3d3310f6426cb15c7ca6d 100644 (file)
@@ -59,6 +59,7 @@ int srv_set_addr_via_libc(struct server *srv, int *err_code);
 int srv_init_addr(void);
 struct server *cli_find_server(struct appctx *appctx, char *arg);
 struct server *new_server(struct proxy *proxy);
+void free_server(struct server *srv);
 
 /* functions related to server name resolution */
 int srv_prepare_for_resolution(struct server *srv, const char *hostname);
index 3efbac03d86192b8d391d35bc8f6e921fb7c3ab6..433d1b8964f02feb5d154d18f0a3d034ddec8924 100644 (file)
@@ -2660,31 +2660,10 @@ void deinit(void)
                while (s) {
                        s_next = s->next;
 
-
-                       task_destroy(s->warmup);
-
-                       free(s->id);
-                       free(s->cookie);
-                       free(s->hostname);
-                       free(s->hostname_dn);
-                       free((char*)s->conf.file);
-                       free(s->per_thr);
-                       free(s->curr_idle_thr);
-                       free(s->resolvers_id);
-                       free(s->addr_node.key);
-
-                       if (s->use_ssl == 1 || s->check.use_ssl == 1 || (s->proxy->options & PR_O_TCPCHK_SSL)) {
-                               if (xprt_get(XPRT_SSL) && xprt_get(XPRT_SSL)->destroy_srv)
-                                       xprt_get(XPRT_SSL)->destroy_srv(s);
-                       }
-                       HA_SPIN_DESTROY(&s->lock);
-
                        list_for_each_entry(srvdf, &server_deinit_list, list)
                                srvdf->fct(s);
 
-                       EXTRA_COUNTERS_FREE(s->extra_counters);
-                       LIST_DEL(&s->global_list);
-                       free(s);
+                       free_server(s);
                        s = s_next;
                }/* end while(s) */
 
index 8935a6aa81bff922cebf847cca3536753a963215..7c08dd0ff10d5ef372ac2a3634a3e5b6f112aea3 100644 (file)
@@ -1840,6 +1840,36 @@ struct server *new_server(struct proxy *proxy)
        return srv;
 }
 
+/* Deallocate a server <srv> and its member. <srv> must be allocated.
+ */
+void free_server(struct server *srv)
+{
+       task_destroy(srv->warmup);
+
+       free(srv->id);
+       free(srv->cookie);
+       free(srv->hostname);
+       free(srv->hostname_dn);
+       free((char*)srv->conf.file);
+       free(srv->per_thr);
+       free(srv->curr_idle_thr);
+       free(srv->resolvers_id);
+       free(srv->addr_node.key);
+
+       if (srv->use_ssl == 1 || srv->check.use_ssl == 1 || (srv->proxy->options & PR_O_TCPCHK_SSL)) {
+               if (xprt_get(XPRT_SSL) && xprt_get(XPRT_SSL)->destroy_srv)
+                       xprt_get(XPRT_SSL)->destroy_srv(srv);
+       }
+       HA_SPIN_DESTROY(&srv->lock);
+
+       LIST_DEL(&srv->global_list);
+
+       EXTRA_COUNTERS_FREE(srv->extra_counters);
+
+       free(srv);
+       srv = NULL;
+}
+
 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
 static int server_sni_expr_init(const char *file, int linenum, char **args, int cur_arg,
                                 struct server *srv, struct proxy *proxy)