now = fr_time();
fr_time_tracking_start(NULL, &frame->tracking, now);
- fr_time_tracking_yield(&frame->tracking, now);
+ fr_time_tracking_yield(&frame->tracking, fr_time());
}
void unlang_frame_perf_yield(unlang_stack_frame_t *frame)
if (!instruction->number || !unlang_thread_array) return;
+ if (frame->tracking.state != FR_TIME_TRACKING_YIELDED) return;
+
fr_time_tracking_resume(&frame->tracking, fr_time());
}
t = &unlang_thread_array[instruction->number];
+ if (frame->tracking.state == FR_TIME_TRACKING_YIELDED) fr_time_tracking_resume(&frame->tracking, fr_time());
+
fr_time_tracking_end(NULL, &frame->tracking, fr_time());
t->tracking.running_total = fr_time_delta_add(t->tracking.running_total, frame->tracking.running_total);
t->tracking.waiting_total = fr_time_delta_add(t->tracking.waiting_total, frame->tracking.waiting_total);
REXDENT();
talloc_free(frame->state);
+ unlang_frame_perf_cleanup(frame);
frame_state_init(stack, frame);
return UNLANG_FRAME_ACTION_RETRY;
}
RDEBUG4("** [%i] %s >> %s", stack->depth, __FUNCTION__,
unlang_ops[instruction->type].name);
- unlang_frame_perf_resume(frame);
fr_assert(frame->process != NULL);
/*