/** Initialize various request fields needed by the worker.
*
*/
-static void worker_request_init(fr_worker_t *worker, request_t *request, fr_time_t now)
+static inline CC_HINT(always_inline)
+void worker_request_init(fr_worker_t *worker, request_t *request, fr_time_t now)
{
request->el = worker->el;
request->backlog = worker->runnable;
request->reply = fr_radius_packet_alloc(request, false);
fr_assert(request->reply != NULL);
- request->number = atomic_fetch_add_explicit(&request_number, 1, memory_order_seq_cst);
-
- request->name = itoa_internal(request, request->number);
-
request->async = talloc_zero(request, fr_async_t);
request->async->recv_time = now;
request->async->el = worker->el;
}
+static inline CC_HINT(always_inline)
+void worker_request_name_number(request_t *request)
+{
+ request->number = atomic_fetch_add_explicit(&request_number, 1, memory_order_seq_cst);
+ if (request->name) talloc_free(UNCONST(char *, request->name));
+ request->name = itoa_internal(request, request->number);
+}
+
static void worker_request_bootstrap(fr_worker_t *worker, fr_channel_data_t *cd, fr_time_t now)
{
bool is_dup;
if (!request) goto nak;
worker_request_init(worker, request, now);
+ worker_request_name_number(request);
/*
* Associate our interpreter with the request
worker_send_reply(worker, request, 0, fr_time());
- DEBUG3("Freeing request %s", request->name);
+ DEBUG3("Worker - Request freed (%s)", request->name);
talloc_free(request);
}
{
fr_worker_t *worker = uctx;
- RDEBUG3("Marked as runnable");
+ RDEBUG3("Worker - Request marked as runnable");
fr_heap_insert(worker->runnable, request);
}
*/
static void _worker_request_yield(request_t *request, UNUSED void *uctx)
{
- RDEBUG3("Yielded");
+ RDEBUG3("Worker - Request yielded");
fr_time_tracking_yield(&request->async->tracking, fr_time());
}
*/
static void _worker_request_resume(request_t *request, UNUSED void *uctx)
{
- RDEBUG3("Resuming");
+ RDEBUG3("Worker - Request resuming");
fr_time_tracking_resume(&request->async->tracking, fr_time());
}
now = fr_time();
worker_request_init(worker, request, now);
+ worker_request_name_number(request);
fr_assert(request_is_internal(request));
request->async->process = process;
* runnable, before the parent request starts running.
*/
if (!is_yielded(frame) || scheduled) {
- RDEBUG3("Not marking resumable due to%s%s",
+ RDEBUG3("Not marking runnable due to%s%s",
!is_yielded(frame) ?
" it not being yielded " : "", scheduled ? " it already being scheduled" : "");
return;
}
- RDEBUG3("Marked as resumable");
+ RDEBUG3("Interpreter - Request marked as runnable");
intp->funcs.mark_runnable(request, intp->uctx);
}