From: Alan T. DeKok Date: Mon, 27 Jul 2020 12:59:39 +0000 (-0400) Subject: round robin among network threads X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f9baf3fa57a03ace86404cd747a1806bd6eee64;p=thirdparty%2Ffreeradius-server.git round robin among network threads --- diff --git a/src/lib/io/schedule.c b/src/lib/io/schedule.c index bf404d6d25f..7652ebd1e55 100644 --- a/src/lib/io/schedule.c +++ b/src/lib/io/schedule.c @@ -146,6 +146,8 @@ struct fr_schedule_s { fr_network_t *single_network; //!< for single-threaded mode fr_worker_t *single_worker; //!< for single-threaded mode + + fr_schedule_network_t *last; //!< for round-robin among network threads }; static _Thread_local int worker_id; //!< Internal ID of the current worker thread. @@ -831,14 +833,10 @@ fr_network_t *fr_schedule_listen_add(fr_schedule_t *sc, fr_listen_t *li) if (sc->el) { nr = sc->single_network; } else { - fr_schedule_network_t *sn; + if (!sc->last) sc->last = fr_dlist_head(&sc->networks); - /* - * @todo - round robin it among the listeners? - * or maybe add it to the same parent thread? - */ - sn = fr_dlist_head(&sc->networks); - nr = sn->nr; + nr = sc->last->nr; + (void) talloc_get_type_abort(nr, fr_network_t); } if (fr_network_listen_add(nr, li) < 0) return NULL;