]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
pass event list to fr_worker_create()
authorAlan T. DeKok <aland@freeradius.org>
Tue, 20 Jun 2017 13:19:33 +0000 (09:19 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 20 Jun 2017 13:19:33 +0000 (09:19 -0400)
In preparation for single-threaded mode

src/lib/io/schedule.c
src/lib/io/worker.c
src/lib/io/worker.h
src/tests/util/radius1_test.c
src/tests/util/worker_test.c

index 8ca6307a3fd37a8c0ac0f567998a66fe5d8781f0..448ef29ad97a90aebb2bb602438f52f604505a2b 100644 (file)
@@ -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;
index 30e548b612ed755fd0076959b2c9833ac7436058..ccee605722e907aee997bde08c438695eaa8c780 100644 (file)
@@ -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);
index 92d715d3f282df4e84a8e1a2ff1085be7f1abba1..b22a81b655c1236df25df58626e54b9aa2af4456 100644 (file)
@@ -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);
index 12f2096b4b6503ded1175f6caf6e26c77f36d3a5..7963109584e6eb7369ce41b4bc761df901ab1470 100644 (file)
@@ -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);
index 09f4f2eaf21e72764876e7f02a8892c79b774ab4..8c41cce991041adc69b3cf1469c9b111bbb30126 100644 (file)
@@ -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);