int unlang_stack_depth(REQUEST *request);
-rlm_rcode_t unlang_module_yield(REQUEST *request, fr_unlang_resume_callback_t callback, fr_unlang_action_t signal_callback,
- void *ctx);
+rlm_rcode_t unlang_module_yield(REQUEST *request, fr_unlang_resume_callback_t callback,
+ fr_unlang_action_t signal_callback, void *ctx);
int unlang_initialize(void);
return RLM_MODULE_YIELD;
}
+static void delay_cancel(REQUEST *request, UNUSED void *instance, UNUSED void *thread, void *ctx,
+ fr_state_action_t action)
+{
+ if (action != FR_ACTION_DONE) return;
+
+ RDEBUG2("Cancelling delay");
+
+ if (!fr_cond_assert(unlang_event_timeout_delete(request, ctx) < 0)) return;
+}
+
static rlm_rcode_t CC_HINT(nonnull) mod_delay(void *instance, UNUSED void *thread, REQUEST *request)
{
rlm_delay_t const *inst = instance;
/*
* Yield, setting delay_return as the next state
*/
- return unlang_module_yield(request, delay_return, NULL, NULL);
+ return unlang_module_yield(request, delay_return, delay_cancel, NULL);
}
extern rad_module_t rlm_delay;