int vars_get_by_desc(const struct var_desc *var_desc, struct sample *smp, const struct buffer *def);
int vars_check_arg(struct arg *arg, char **err);
+/* locks the <vars> for writes */
+static inline void vars_wrlock(struct vars *vars)
+{
+ HA_RWLOCK_WRLOCK(VARS_LOCK, &vars->rwlock);
+}
+
+/* unlocks the <vars> for writes */
+static inline void vars_wrunlock(struct vars *vars)
+{
+ HA_RWLOCK_WRUNLOCK(VARS_LOCK, &vars->rwlock);
+}
+
+/* locks the <vars> for reads */
+static inline void vars_rdlock(struct vars *vars)
+{
+ HA_RWLOCK_RDLOCK(VARS_LOCK, &vars->rwlock);
+}
+
+/* unlocks the <vars> for reads */
+static inline void vars_rdunlock(struct vars *vars)
+{
+ HA_RWLOCK_RDUNLOCK(VARS_LOCK, &vars->rwlock);
+}
+
#endif
struct var *var, *tmp;
unsigned int size = 0;
- HA_RWLOCK_WRLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrlock(vars);
list_for_each_entry_safe(var, tmp, &vars->head, l) {
size += var_clear(var, 1);
}
- HA_RWLOCK_WRUNLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrunlock(vars);
var_accounting_diff(vars, sess, strm, -size);
}
struct var *var, *tmp;
unsigned int size = 0;
- HA_RWLOCK_WRLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrlock(vars);
list_for_each_entry_safe(var, tmp, &vars->head, l) {
size += var_clear(var, 1);
}
- HA_RWLOCK_WRUNLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrunlock(vars);
_HA_ATOMIC_SUB(&vars->size, size);
_HA_ATOMIC_SUB(&proc_vars.size, size);
if (!vars || vars->scope != scope)
return 0;
- HA_RWLOCK_WRLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrlock(vars);
/* Look for existing variable name. */
var = var_get(vars, name_hash);
/* OK, now done */
ret = 1;
unlock:
- HA_RWLOCK_WRUNLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrunlock(vars);
return ret;
}
return 0;
/* Look for existing variable name. */
- HA_RWLOCK_WRLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrlock(vars);
var = var_get(vars, name_hash);
if (var) {
size = var_clear(var, 0);
var_accounting_diff(vars, smp->sess, smp->strm, -size);
}
- HA_RWLOCK_WRUNLOCK(VARS_LOCK, &vars->rwlock);
+ vars_wrunlock(vars);
return 1;
}
struct var *var;
/* Get the variable entry. */
- HA_RWLOCK_RDLOCK(VARS_LOCK, &vars->rwlock);
+ vars_rdlock(vars);
var = var_get(vars, name_hash);
if (!var || !var->data.type) {
if (!def) {
- HA_RWLOCK_RDUNLOCK(VARS_LOCK, &vars->rwlock);
+ vars_rdunlock(vars);
return 0;
}
/* Copy sample. */
smp_dup(smp);
- HA_RWLOCK_RDUNLOCK(VARS_LOCK, &vars->rwlock);
+ vars_rdunlock(vars);
return 1;
}