From: Alan T. DeKok Date: Mon, 19 Dec 2016 18:10:19 +0000 (-0500) Subject: Minor things missed in previous commits X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41ae5192d38c2e689f28beb0508ea05c877069b9;p=thirdparty%2Ffreeradius-server.git Minor things missed in previous commits --- diff --git a/src/util/worker.c b/src/util/worker.c index ec36ee9fb8e..1e92ac905ae 100644 --- a/src/util/worker.c +++ b/src/util/worker.c @@ -158,9 +158,13 @@ struct fr_worker_t { */ static void fr_worker_drain_input(fr_worker_t *worker, fr_channel_t *ch, fr_channel_data_t *cd) { - if (!cd) cd = fr_channel_recv_request(ch); + if (!cd) { + cd = fr_channel_recv_request(ch); + if (!cd) return; + } do { + cd->channel.ch = ch; WORKER_HEAP_INSERT(to_decode, cd, request.list); } while ((cd = fr_channel_recv_request(ch)) != NULL); } @@ -314,7 +318,7 @@ redo: * This message has asynchronously aged out while it was * in the queue. Delete it, and go get another one. */ - if (cd->m.when != *cd->request.start_time) { + if (cd->request.start_time && (cd->m.when != *cd->request.start_time)) { fr_message_done(&cd->m); goto redo; } @@ -372,6 +376,11 @@ redo: request->el = worker->el; request->packet_ctx = cd->ctx; + /* + * Hoist run-time checks here. + */ + if (!cd->request.start_time) request->original_recv_time = &request->recv_time; + /* * New requests are inserted into the time order list in * strict time priority. Once they are in the list, they @@ -542,7 +551,7 @@ static void fr_worker_run_request(fr_worker_t *worker, REQUEST *request) * active, run it. Otherwise, tell it that it's done. */ if ((*request->original_recv_time == request->recv_time) && - (fr_channel_active(request->channel))) { + fr_channel_active(request->channel)) { final = request->process_async(request, FR_TRANSPORT_ACTION_RUN); } else { @@ -591,7 +600,7 @@ static void fr_worker_run_request(fr_worker_t *worker, REQUEST *request) /* * Encode it. */ - size = request->transport->encode(request->packet_ctx, request, reply->m.data, reply->m.data_size); + size = request->transport->encode(request->packet_ctx, request, reply->m.data, reply->m.rb_size); if (size < 0) { fr_message_done(&reply->m); goto fail;