(void)talloc_get_type_abort(request, request_t); /* Check the request hasn't already been freed */
+ if (limit == 0) limit = 1; /* Never signal frame 0 */
+
fr_assert(stack->depth > 0);
/*
for (i = depth; i > limit; i--) {
frame = &stack->frame[i];
if (frame->signal) frame->signal(request, frame, action);
- frame_pop(request->stack);
+ frame_cleanup(frame);
}
+ stack->depth = i;
return;
}
/*
* Don't clear top_frame flag, bad things happen...
*/
- repeatable_clear(frame);
- break_point_clear(frame);
- return_point_clear(frame);
- yielded_clear(frame);
+ frame->uflags &= UNWIND_FLAG_TOP_FRAME;
if (frame->state) {
talloc_free_children(frame->state); /* *(ev->parent) = NULL in event.c */
TALLOC_FREE(frame->state);