* eventually start heading back up the stack.
*/
default:
- if (state->repeat) {
- frame->process = unlang_function_call_repeat;
- repeatable_set(frame);
- }
-
+ if (state->repeat) frame_repeat(frame, unlang_function_call_repeat);
}
request->module = caller;
fr_value_box_list_init(&update_state->lhs_result);
fr_value_box_list_init(&update_state->rhs_result);
fr_dlist_init(&update_state->vlm_head, vp_list_mod_t, entry);
- repeatable_set(frame);
/*
* Call list_mod_create
*/
- frame->process = list_mod_create;
+ frame_repeat(frame, list_mod_create);
return list_mod_create(p_result, request, frame);
}
* so that the resume function is always
* called going back up the stack.
*/
- frame->process = unlang_module_resume;
- repeatable_set(frame);
+ frame_repeat(frame, unlang_module_resume);
return UNLANG_ACTION_YIELD;
}
* and when the I/O operation completes
* it shouldn't be called again.
*/
- if (!state->resume) frame->process = unlang_module_resume_done;
- repeatable_set(frame);
+ if (!state->resume) {
+ frame_repeat(frame, unlang_module_resume_done);
+ } else {
+ repeatable_set(frame);
+ }
return UNLANG_ACTION_YIELD;
/*
* after the child returns.
*/
if (!state->resume) {
- frame->process = unlang_module_resume_done;
+ frame_repeat(frame, unlang_module_resume_done);
state->set_rcode = false; /* Preserve the child rcode */
+ } else {
+ repeatable_set(frame);
}
- repeatable_set(frame);
return UNLANG_ACTION_PUSHED_CHILD;
case UNLANG_ACTION_CALCULATE_RESULT:
* it shouldn't be called again.
*/
if (!state->resume) {
- frame->process = unlang_module_resume_done;
+ frame_repeat(frame, unlang_module_resume_done);
} else {
- frame->process = unlang_module_resume;
+ frame_repeat(frame, unlang_module_resume);
}
- repeatable_set(frame);
return UNLANG_ACTION_YIELD;
/*
* after the child returns.
*/
if (!state->resume) {
- frame->process = unlang_module_done;
+ frame_repeat(frame, unlang_module_done);
state->set_rcode = false; /* Preserve the child rcode */
+ } else {
+ repeatable_set(frame);
}
- repeatable_set(frame);
return UNLANG_ACTION_PUSHED_CHILD;
case UNLANG_ACTION_CALCULATE_RESULT:
* a function to process the results
* of the children.
*/
- frame->process = unlang_parallel_resume;
- repeatable_set(frame);
+ frame_repeat(frame, unlang_parallel_resume);
/*
* Yield to the children
}
fr_dlist_talloc_free(&state->box); /* this is the xlat expansion, and not the output string we want */
-
- frame->process = unlang_tmpl_exec_wait_final;
- repeatable_set(frame);
+ frame_repeat(frame, unlang_tmpl_exec_wait_final);
return UNLANG_ACTION_YIELD;
}
* Inline exec's are only called from in-line
* text in the configuration files.
*/
- frame->process = unlang_tmpl_exec_nowait_resume;
-
- repeatable_set(frame);
+ frame_repeat(frame, unlang_tmpl_exec_nowait_resume);
if (unlang_xlat_push(state->ctx, &state->box, request, tmpl_xlat(ut->tmpl), false) < 0) {
*p_result = RLM_MODULE_FAIL;
return UNLANG_ACTION_STOP_PROCESSING;
* XLAT structs are allowed.
*/
if (ut->tmpl->type == TMPL_TYPE_XLAT) {
- frame->process = unlang_tmpl_resume;
- repeatable_set(frame);
+ frame_repeat(frame, unlang_tmpl_resume);
if (unlang_xlat_push(state->ctx, &state->box, request, tmpl_xlat(ut->tmpl), false) < 0) {
*p_result = RLM_MODULE_FAIL;
return UNLANG_ACTION_STOP_PROCESSING;
/*
* Expand the arguments to the program we're executing.
*/
- frame->process = unlang_tmpl_exec_wait_resume;
- repeatable_set(frame);
+ frame_repeat(frame, unlang_tmpl_exec_wait_resume);
if (unlang_xlat_push(state->ctx, &state->box, request, xlat, false) < 0) {
*p_result = RLM_MODULE_FAIL;
return UNLANG_ACTION_STOP_PROCESSING;
case XLAT_ACTION_PUSH_CHILD:
fr_assert(child);
- repeatable_set(frame);
- frame->process = unlang_xlat_repeat;
+ frame_repeat(frame, unlang_xlat_repeat);
/*
* Clear out the results of any previous expansions