From: Alan T. DeKok Date: Tue, 20 Jun 2017 13:19:33 +0000 (-0400) Subject: pass event list to fr_worker_create() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b1e33e910514da91dfbf38564bdb89299503de8;p=thirdparty%2Ffreeradius-server.git pass event list to fr_worker_create() In preparation for single-threaded mode --- diff --git a/src/lib/io/schedule.c b/src/lib/io/schedule.c index 8ca6307a3fd..448ef29ad97 100644 --- a/src/lib/io/schedule.c +++ b/src/lib/io/schedule.c @@ -143,11 +143,19 @@ static void *fr_schedule_worker_thread(void *arg) fr_schedule_worker_t *sw = arg; fr_schedule_t *sc = sw->sc; fr_schedule_child_status_t status = FR_CHILD_FAIL; + fr_event_list_t *el; char buffer[32]; fr_log(sc->log, L_INFO, "Worker %d starting\n", sw->id); - sw->worker = fr_worker_create(sw, sc->log, sc->worker_flags); + el = fr_event_list_alloc(sw, NULL, NULL); + if (!el) { + fr_log(sc->log, L_ERR, "Worker %d - Failed creating event list: %s", + sw->id, fr_strerror()); + goto fail; + } + + sw->worker = fr_worker_create(sw, el, sc->log, sc->worker_flags); if (!sw->worker) { fr_log(sc->log, L_ERR, "Worker %d - Failed creating worker: %s", sw->id, fr_strerror()); goto fail; diff --git a/src/lib/io/worker.c b/src/lib/io/worker.c index 30e548b612e..ccee605722e 100644 --- a/src/lib/io/worker.c +++ b/src/lib/io/worker.c @@ -1006,13 +1006,14 @@ void fr_worker_destroy(fr_worker_t *worker) /** Create a worker * * @param[in] ctx the talloc context + * @param[in] el the event list * @param[in] logger the destination for all logging messages * @param[in] flags debug flags * @return * - NULL on error * - fr_worker_t on success */ -fr_worker_t *fr_worker_create(TALLOC_CTX *ctx, fr_log_t *logger, uint32_t flags) +fr_worker_t *fr_worker_create(TALLOC_CTX *ctx, fr_event_list_t *el, fr_log_t *logger, uint32_t flags) { int max_channels = 64; fr_worker_t *worker; @@ -1033,6 +1034,7 @@ nomem: goto nomem; } + worker->el = el; worker->log = logger; /* @@ -1043,13 +1045,6 @@ nomem: worker->message_set_size = 1024; worker->ring_buffer_size = (1 << 16); - worker->el = fr_event_list_alloc(worker, NULL, NULL); - if (!worker->el) { - fr_strerror_printf("Failed creating event list: %s", fr_strerror()); - talloc_free(worker); - return NULL; - } - if (fr_event_pre_insert(worker->el, fr_worker_pre_event, worker) < 0) { fr_strerror_printf("Failed adding pre-check to event list"); talloc_free(worker); diff --git a/src/lib/io/worker.h b/src/lib/io/worker.h index 92d715d3f28..b22a81b655c 100644 --- a/src/lib/io/worker.h +++ b/src/lib/io/worker.h @@ -44,7 +44,7 @@ extern "C" { */ typedef struct fr_worker_t fr_worker_t; -fr_worker_t *fr_worker_create(TALLOC_CTX *ctx, fr_log_t *logger, uint32_t flags); +fr_worker_t *fr_worker_create(TALLOC_CTX *ctx, fr_event_list_t *el, fr_log_t *logger, uint32_t flags) CC_HINT(nonnull(2,3)); void fr_worker_destroy(fr_worker_t *worker) CC_HINT(nonnull); int fr_worker_kq(fr_worker_t *worker) CC_HINT(nonnull); fr_event_list_t *fr_worker_el(fr_worker_t *worker) CC_HINT(nonnull); diff --git a/src/tests/util/radius1_test.c b/src/tests/util/radius1_test.c index 12f2096b4b6..7963109584e 100644 --- a/src/tests/util/radius1_test.c +++ b/src/tests/util/radius1_test.c @@ -151,6 +151,7 @@ static void *worker_thread(void *arg) TALLOC_CTX *ctx; fr_worker_t *worker; fr_schedule_worker_t *sw; + fr_event_list_t *el; sw = (fr_schedule_worker_t *) arg; @@ -159,7 +160,13 @@ static void *worker_thread(void *arg) ctx = talloc_init("worker"); if (!ctx) _exit(1); - worker = sw->worker = fr_worker_create(ctx, &default_log, ~0); + el = fr_event_list_alloc(ctx, NULL, NULL); + if (!el) { + fprintf(stderr, "radius_test: Failed to create the event list\n"); + exit(1); + } + + worker = sw->worker = fr_worker_create(ctx, el, &default_log, ~0); if (!worker) { fprintf(stderr, "radius_test: Failed to create the worker\n"); exit(1); diff --git a/src/tests/util/worker_test.c b/src/tests/util/worker_test.c index 09f4f2eaf21..8c41cce9910 100644 --- a/src/tests/util/worker_test.c +++ b/src/tests/util/worker_test.c @@ -154,6 +154,7 @@ static void *worker_thread(void *arg) TALLOC_CTX *ctx; fr_worker_t *worker; fr_schedule_worker_t *sw; + fr_event_list_t *el; sw = (fr_schedule_worker_t *) arg; @@ -162,7 +163,13 @@ static void *worker_thread(void *arg) ctx = talloc_init("worker"); if (!ctx) _exit(1); - worker = sw->worker = fr_worker_create(ctx, &default_log, ~0); + el = fr_event_list_alloc(ctx, NULL, NULL); + if (!el) { + fprintf(stderr, "worker_test: Failed to create the event list\n"); + exit(1); + } + + worker = sw->worker = fr_worker_create(ctx, el, &default_log, ~0); if (!worker) { fprintf(stderr, "worker_test: Failed to create the worker\n"); exit(1);