MINOR: server: add SRV_F_DELETED flag

Set the SRV_F_DELETED flag when server is removed from the cli.

When removing a server from the cli (in cli_parse_delete_server()),
we update the "visible" server list so that the removed server is no
longer part of the list.

However, despite the server being removed from "visible" server list,
one could still access the server data from a valid ptr (ie: srv_take())

Deleted flag helps detecting when a server is in transient removal
state: that is, removed from the list, thus not visible but not yet
purged from memory.
This commit is contained in:
Aurelien DARRAGON 2023-01-24 14:40:01 +01:00 committed by Christopher Faulet
parent 8019f78326
commit 75b9d1c041
2 changed files with 10 additions and 0 deletions

View File

@ -150,6 +150,7 @@ enum srv_initaddr {
#define SRV_F_DYNAMIC 0x1000 /* dynamic server instantiated at runtime */
#define SRV_F_NON_PURGEABLE 0x2000 /* this server cannot be removed at runtime */
#define SRV_F_DEFSRV_USE_SSL 0x4000 /* default-server uses SSL */
#define SRV_F_DELETED 0x8000 /* srv is deleted but not yet purged */
/* configured server options for send-proxy (server->pp_opts) */
#define SRV_PP_V1 0x0001 /* proxy protocol version 1 */

View File

@ -5107,6 +5107,15 @@ static int cli_parse_delete_server(char **args, char *payload, struct appctx *ap
/* remove srv from idle_node tree for idle conn cleanup */
eb32_delete(&srv->idle_node);
/* flag the server as deleted
* (despite the server being removed from primary server list,
* one could still access the server data from a valid ptr)
* Deleted flag helps detecting when a server is in transient removal
* state.
* ie: removed from the list but not yet freed/purged from memory.
*/
srv->flags |= SRV_F_DELETED;
/* set LSB bit (odd bit) for reuse_cnt */
srv_id_reuse_cnt |= 1;