* to debug problems if they free or change elements
* and don't remove them from the list.
*/
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
xa = resume(ctx, out, request, exp->call.inst, thread_inst->data, result, rctx);
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
RDEBUG2("EXPAND %%{%s:...}", exp->call.func->name);
switch (xa) {
ssize_t slen;
if (!fr_dlist_empty(result)) {
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
result_str = fr_value_box_list_aprint(NULL, result, NULL, NULL);
if (!result_str) return XLAT_ACTION_FAIL;
} else {
node->fmt, result,
(node->call.func->input_type == XLAT_INPUT_ARGS) ? ')' : '}');
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
/*
* Need to copy the input list in case
* the async function mucks with it.
if (RDEBUG_ENABLED2) fr_dlist_talloc_free(&result_copy);
return xa;
}
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
xa = node->call.func->func.async(ctx, out, request,
node->call.inst->data, thread_inst->data, result);
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
if (RDEBUG_ENABLED2) {
xlat_debug_log_expansion(request, *in, &result_copy);
xlat_debug_log_expansion(request, *in, NULL);
xlat_debug_log_list_result(request, result);
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
fr_dcursor_init(&from, result);
fr_dcursor_merge(out, &from);
fr_assert(fr_dlist_empty(result));
fr_assert(!fr_dlist_empty(result));
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
/*
* If the input is a series of xlat expansions,
fr_dlist_talloc_free(result);
fr_dlist_insert_head(result, value);
}
- VALUE_BOX_LIST_VERIFY(result);
+ VALUE_BOX_TALLOC_LIST_VERIFY(result);
MEM(value = fr_value_box_alloc(ctx, FR_TYPE_GROUP, NULL, false));
fr_dlist_move(&value->vb_group, result);
for (node = *in; node; node = (*in)->next) {
*in = node; /* Update node in our caller */
fr_dcursor_tail(out); /* Needed for debugging */
- VALUE_BOX_LIST_VERIFY(out->dlist);
+ VALUE_BOX_TALLOC_LIST_VERIFY(out->dlist);
switch (node->type) {
case XLAT_LITERAL:
}
finish:
- VALUE_BOX_LIST_VERIFY(out->dlist);
+ VALUE_BOX_TALLOC_LIST_VERIFY(out->dlist);
XLAT_DEBUG("** [%i] %s << %s", unlang_interpret_stack_depth(request),
__FUNCTION__, fr_table_str_by_value(xlat_action_table, xa, "<INVALID>"));
uint32_t fr_value_box_hash_update(fr_value_box_t const *vb, uint32_t hash);
/** @} */
-void value_box_verify(char const *file, int line, fr_value_box_t const *vb);
-void value_box_list_verify(char const *file, int line, fr_value_box_list_t const *list);
+void value_box_verify(char const *file, int line, fr_value_box_t const *vb, bool talloced);
+void value_box_list_verify(char const *file, int line, fr_value_box_list_t const *list, bool talloced);
#ifdef WITH_VERIFY_PTR
-# define VALUE_BOX_VERIFY(_x) value_box_verify(__FILE__, __LINE__, _x)
-# define VALUE_BOX_LIST_VERIFY(_x) value_box_list_verify(__FILE__, __LINE__, _x)
+# define VALUE_BOX_VERIFY(_x) value_box_verify(__FILE__, __LINE__, _x, false)
+# define VALUE_BOX_LIST_VERIFY(_x) value_box_list_verify(__FILE__, __LINE__, _x, false)
+# define VALUE_BOX_TALLOC_VERIFY(_x) value_box_verify(__FILE__, __LINE__, _x, true)
+# define VALUE_BOX_TALLOC_LIST_VERIFY(_x) value_box_list_verify(__FILE__, __LINE__, _x, true)
#else
/*
* Even if were building without WITH_VERIFY_PTR
*/
# define VALUE_BOX_VERIFY(_x) fr_assert(_x)
# define VALUE_BOX_LIST_VERIFY(_x) fr_assert(_x)
+# define VALUE_BOX_TALLOC_VERIFY(_x) fr_assert(_x)
+# define VALUE_BOX_TALLOC_LIST_VERIFY(_x) fr_assert(_x)
#endif
#undef _CONST