/** Make us responsible for running the request
*
*/
-static void _worker_request_detach(request_t *request, void *uctx)
+static void _worker_request_detach(request_t *request, UNUSED void *uctx)
{
- fr_worker_t *worker = talloc_get_type_abort(uctx, fr_worker_t);
+// fr_worker_t *worker = talloc_get_type_abort(uctx, fr_worker_t);
RDEBUG3("Request is detached");
fr_assert(request_is_detached(request));
* because they don't contribute for the time consumed by an
* external request.
*/
- worker_request_time_tracking_end(worker, request, fr_time());
+// worker_request_time_tracking_end(worker, request, fr_time());
return;
}
}
-/** The main loop and entry point of the worker thread.
+/** The main loop and entry point of the stand-alone worker thread.
+ *
+ * Where there is only one thread, the event loop runs fr_worker_pre_event() and fr_worker_post_event()
+ * instead, And then fr_worker_post_event() takes care of calling worker_run_request() to actually run the
+ * request.
*
* @param[in] worker the worker data structure to manage
*/
{
WORKER_VERIFY;
- while (!worker->exiting) {
+ while (true) {
bool wait_for_event;
int num_events;
*/
wait_for_event = (fr_heap_num_elements(worker->runnable) == 0);
if (wait_for_event) {
+ if (worker->exiting && (fr_minmax_heap_num_elements(worker->time_order) == 0)) break;
+
DEBUG4("Ready to process requests");
}