From: Alan T. DeKok Date: Sun, 18 Jun 2017 18:58:37 +0000 (-0400) Subject: allow for flags passed to worker. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc79a3480c07e8e2a70458e37f52492afb951c0f;p=thirdparty%2Ffreeradius-server.git allow for flags passed to worker. ideally for debug... --- diff --git a/src/lib/io/schedule.c b/src/lib/io/schedule.c index d4d388c8fea..1bd6bb36082 100644 --- a/src/lib/io/schedule.c +++ b/src/lib/io/schedule.c @@ -132,6 +132,8 @@ struct fr_schedule_t { fr_schedule_thread_instantiate_t worker_thread_instantiate; //!< thread instantiation callback void *worker_instantiate_ctx; //!< thread instantiation context + uint32_t worker_flags; //!< for debugging the worker + fr_heap_t *workers; //!< heap of workers fr_heap_t *done_workers; //!< heap of done workers @@ -206,7 +208,7 @@ static void *fr_schedule_worker_thread(void *arg) goto fail; } - sw->worker = fr_worker_create(ctx, sc->log); + sw->worker = fr_worker_create(ctx, 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 d7b4056c217..fe697f2e7be 100644 --- a/src/lib/io/worker.c +++ b/src/lib/io/worker.c @@ -81,6 +81,8 @@ typedef struct fr_worker_heap_t { struct fr_worker_t { char const *name; //!< name of this worker + uint32_t flags; //!< various debugging options, etc. + int kq; //!< my kq fr_log_t *log; //!< log destination @@ -996,7 +998,7 @@ void fr_worker_destroy(fr_worker_t *worker) * - NULL on error * - fr_worker_t on success */ -fr_worker_t *fr_worker_create(TALLOC_CTX *ctx, fr_log_t *logger) +fr_worker_t *fr_worker_create(TALLOC_CTX *ctx, fr_log_t *logger, uint32_t flags) { int max_channels = 64; fr_worker_t *worker; @@ -1009,6 +1011,7 @@ nomem: } worker->name = ""; + worker->flags = flags; worker->channel = talloc_zero_array(worker, fr_channel_t *, max_channels); if (!worker->channel) { diff --git a/src/lib/io/worker.h b/src/lib/io/worker.h index e1428cdd11c..c54735a1017 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); +fr_worker_t *fr_worker_create(TALLOC_CTX *ctx, fr_log_t *logger, uint32_t flags); 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 44b5078302e..6116fc30efa 100644 --- a/src/tests/util/radius1_test.c +++ b/src/tests/util/radius1_test.c @@ -159,7 +159,7 @@ static void *worker_thread(void *arg) ctx = talloc_init("worker"); if (!ctx) _exit(1); - worker = sw->worker = fr_worker_create(ctx, &default_log); + worker = sw->worker = fr_worker_create(ctx, &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 596eb88a6fc..3e0716859fc 100644 --- a/src/tests/util/worker_test.c +++ b/src/tests/util/worker_test.c @@ -162,7 +162,7 @@ static void *worker_thread(void *arg) ctx = talloc_init("worker"); if (!ctx) _exit(1); - worker = sw->worker = fr_worker_create(ctx, &default_log); + worker = sw->worker = fr_worker_create(ctx, &default_log, ~0); if (!worker) { fprintf(stderr, "worker_test: Failed to create the worker\n"); exit(1);