/** Internal request (i.e. one generated by the interpreter) is now complete
*
*/
-static void _request_internal_init(request_t *request, void *uctx)
+static void _request_init_internal(request_t *request, void *uctx)
{
unlang_interpret_synchronous_t *intps = uctx;
/** Internal request (i.e. one generated by the interpreter) is now complete
*
*/
-static void _request_internal_done(request_t *request, UNUSED rlm_rcode_t rcode, UNUSED void *uctx)
+static void _request_done_internal(request_t *request, UNUSED rlm_rcode_t rcode, UNUSED void *uctx)
{
RDEBUG3("Done synchronous request");
+
+ /*
+ * Detached requests have to be freed by us
+ * as nothing else can free them.
+ */
+ if (!request->parent) talloc_free(request);
}
/** External request is now complete
*
*/
-static void _request_external_done(request_t *request, UNUSED rlm_rcode_t rcode, UNUSED void *uctx)
+static void _request_done_external(request_t *request, UNUSED rlm_rcode_t rcode, UNUSED void *uctx)
{
/*
* If we're running a real request, then the final
}
MEM(intps->intp = unlang_interpret_init(intps, intps->el,
&(unlang_request_func_t){
- .init_internal = _request_internal_init,
- .done_internal = _request_internal_done,
- .done_external = _request_external_done,
+ .init_internal = _request_init_internal,
+ .done_internal = _request_done_internal,
+ .done_external = _request_done_external,
.mark_runnable = _request_runnable,
.yield = _request_yield,
.resume = _request_resume,