From 63c30667d7910ce4b76f4381c3bf902e249ad43d Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 8 Sep 2021 13:58:19 +0200 Subject: [PATCH] MINOR: vars: support storing empty sample data with a variable Storing an unset sample (SMP_T_ANY == 0) will be used to only reserve the variable's space but associate no value. We need to slightly adjust var_to_smp() for this so that it considers a value-less variable as non existent and falls back to the default value. --- src/vars.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vars.c b/src/vars.c index 80a6a4520..52f19c560 100644 --- a/src/vars.c +++ b/src/vars.c @@ -591,9 +591,9 @@ int vars_unset_by_name_ifexist(const char *name, size_t len, struct sample *smp) } -/* This retrieves variable from variables , and if found, - * duplicates the result into sample . smp_dup() is used in order to - * release the variables lock ASAP (so a pre-allocated chunk is obtained +/* This retrieves variable from variables , and if found and not + * empty, duplicates the result into sample . smp_dup() is used in order + * to release the variables lock ASAP (so a pre-allocated chunk is obtained * via get_trash_shunk()). The variables' lock is used for reads. * * The function returns 0 if the variable was not found and no default @@ -607,7 +607,7 @@ static int var_to_smp(struct vars *vars, const char *name, struct sample *smp, c /* Get the variable entry. */ HA_RWLOCK_RDLOCK(VARS_LOCK, &vars->rwlock); var = var_get(vars, name); - if (!var) { + if (!var || !var->data.type) { if (!def) { HA_RWLOCK_RDUNLOCK(VARS_LOCK, &vars->rwlock); return 0;