mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-16 16:34:42 +00:00
MINOR: server: return the next srv instance on free_server
As a convenience, return the next server instance from servers list on free_server. This is particularily useful when using this function on the servers list without having to save of the next pointer before calling it.
This commit is contained in:
parent
cd61e8383d
commit
f5c1e12e44
@ -59,7 +59,7 @@ int srv_set_addr_via_libc(struct server *srv, int *err_code);
|
|||||||
int srv_init_addr(void);
|
int srv_init_addr(void);
|
||||||
struct server *cli_find_server(struct appctx *appctx, char *arg);
|
struct server *cli_find_server(struct appctx *appctx, char *arg);
|
||||||
struct server *new_server(struct proxy *proxy);
|
struct server *new_server(struct proxy *proxy);
|
||||||
void free_server(struct server *srv);
|
struct server *free_server(struct server *srv);
|
||||||
int srv_init_per_thr(struct server *srv);
|
int srv_init_per_thr(struct server *srv);
|
||||||
|
|
||||||
/* functions related to server name resolution */
|
/* functions related to server name resolution */
|
||||||
|
@ -130,7 +130,7 @@ static void free_stick_rules(struct list *rules)
|
|||||||
|
|
||||||
void free_proxy(struct proxy *p)
|
void free_proxy(struct proxy *p)
|
||||||
{
|
{
|
||||||
struct server *s,*s_next;
|
struct server *s;
|
||||||
struct cap_hdr *h,*h_next;
|
struct cap_hdr *h,*h_next;
|
||||||
struct listener *l,*l_next;
|
struct listener *l,*l_next;
|
||||||
struct bind_conf *bind_conf, *bind_back;
|
struct bind_conf *bind_conf, *bind_back;
|
||||||
@ -289,11 +289,9 @@ void free_proxy(struct proxy *p)
|
|||||||
|
|
||||||
s = p->srv;
|
s = p->srv;
|
||||||
while (s) {
|
while (s) {
|
||||||
s_next = s->next;
|
|
||||||
list_for_each_entry(srvdf, &server_deinit_list, list)
|
list_for_each_entry(srvdf, &server_deinit_list, list)
|
||||||
srvdf->fct(s);
|
srvdf->fct(s);
|
||||||
free_server(s);
|
s = free_server(s);
|
||||||
s = s_next;
|
|
||||||
}/* end while(s) */
|
}/* end while(s) */
|
||||||
|
|
||||||
list_for_each_entry_safe(l, l_next, &p->conf.listeners, by_fe) {
|
list_for_each_entry_safe(l, l_next, &p->conf.listeners, by_fe) {
|
||||||
|
16
src/server.c
16
src/server.c
@ -2213,11 +2213,18 @@ static uint srv_release_dynsrv(struct server *srv)
|
|||||||
/* Deallocate a server <srv> and its member. <srv> must be allocated. For
|
/* Deallocate a server <srv> and its member. <srv> must be allocated. For
|
||||||
* dynamic servers, its refcount is decremented first. The free operations are
|
* dynamic servers, its refcount is decremented first. The free operations are
|
||||||
* conducted only if the refcount is nul, unless the process is stopping.
|
* conducted only if the refcount is nul, unless the process is stopping.
|
||||||
|
*
|
||||||
|
* As a convenience, <srv.next> is returned if srv is not NULL. It may be useful
|
||||||
|
* when calling free_server on the list of servers.
|
||||||
*/
|
*/
|
||||||
void free_server(struct server *srv)
|
struct server *free_server(struct server *srv)
|
||||||
{
|
{
|
||||||
|
struct server *next = NULL;
|
||||||
|
|
||||||
if (!srv)
|
if (!srv)
|
||||||
return;
|
goto end;
|
||||||
|
|
||||||
|
next = srv->next;
|
||||||
|
|
||||||
/* For dynamic servers, decrement the reference counter. Only free the
|
/* For dynamic servers, decrement the reference counter. Only free the
|
||||||
* server when reaching zero.
|
* server when reaching zero.
|
||||||
@ -2225,7 +2232,7 @@ void free_server(struct server *srv)
|
|||||||
if (likely(!(global.mode & MODE_STOPPING))) {
|
if (likely(!(global.mode & MODE_STOPPING))) {
|
||||||
if (srv->flags & SRV_F_DYNAMIC) {
|
if (srv->flags & SRV_F_DYNAMIC) {
|
||||||
if (srv_release_dynsrv(srv))
|
if (srv_release_dynsrv(srv))
|
||||||
return;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2255,6 +2262,9 @@ void free_server(struct server *srv)
|
|||||||
|
|
||||||
free(srv);
|
free(srv);
|
||||||
srv = NULL;
|
srv = NULL;
|
||||||
|
|
||||||
|
end:
|
||||||
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove a server <srv> from a tracking list if <srv> is tracking another
|
/* Remove a server <srv> from a tracking list if <srv> is tracking another
|
||||||
|
Loading…
Reference in New Issue
Block a user