fixup! fixup! fixup! WIP: Add loopmgr that replaces isc_app, and parts of isc_nm related to the uv_loops
This commit is contained in:
@@ -87,15 +87,16 @@ isc_loopmgr_run(isc_loopmgr_t *loopmgr);
|
||||
*\li 'loopmgr' is a valid loop manager.
|
||||
*/
|
||||
void
|
||||
isc_loop_runjob(isc_loop_t *loop, isc_job_cb cb, void *cbarg);
|
||||
isc_loopmgr_runjob(isc_loopmgr_t *loopmgr, isc_job_cb cb, void *cbarg);
|
||||
/*%<
|
||||
* Schedule a single job to run in 'loop' in the next iteration
|
||||
* of uv_run(): 'cb' will be called with argument 'cbarg'.
|
||||
* Schedule a single job in the currently running loop. On the next
|
||||
* iteration of uv_run(), 'cb' will be called with argument 'cbarg'.
|
||||
* (Note that this can only be called once per iteration; if a job was
|
||||
* already scheduled it will be replaced with this one.)
|
||||
*
|
||||
* Requires:
|
||||
*\li 'loop' is a valid loop.
|
||||
*\li 'loop' is the currently running loop, or the loop manager
|
||||
* associated with 'loop' is paused or has not yet been started.
|
||||
*\li We are in a running loop.
|
||||
*/
|
||||
|
||||
void
|
||||
|
||||
@@ -396,18 +396,15 @@ isc_loopmgr_teardown(isc_loopmgr_t *loopmgr, isc_job_cb cb, void *cbarg) {
|
||||
}
|
||||
|
||||
void
|
||||
isc_loop_runjob(isc_loop_t *loop, isc_job_cb cb, void *cbarg) {
|
||||
isc_loopmgr_t *loopmgr = NULL;
|
||||
isc_loopmgr_runjob(isc_loopmgr_t *loopmgr, isc_job_cb cb, void *cbarg) {
|
||||
isc_loop_t *loop = NULL;
|
||||
isc_job_t *job = NULL;
|
||||
int r;
|
||||
|
||||
REQUIRE(VALID_LOOP(loop));
|
||||
REQUIRE(VALID_LOOPMGR(loopmgr));
|
||||
REQUIRE(isc__loopmgr_tid_v != ISC_LOOPMGR_TID_UNKNOWN);
|
||||
|
||||
loopmgr = loop->loopmgr;
|
||||
|
||||
REQUIRE(loop->tid == isc__loopmgr_tid_v ||
|
||||
!atomic_load(&loopmgr->running) ||
|
||||
atomic_load(&loopmgr->paused));
|
||||
loop = &loopmgr->loops[isc__loopmgr_tid_v];
|
||||
|
||||
job = isc_mem_get(loop->mctx, sizeof(*job));
|
||||
*job = (isc_job_t){
|
||||
|
||||
@@ -99,8 +99,9 @@ static void
|
||||
isc_loopmgr_test(void **state) {
|
||||
isc_loopmgr_t *loopmgr = *state;
|
||||
|
||||
isc_loopmgr_setup(loopmgr, count, loopmgr);
|
||||
atomic_store(&scheduled, 0);
|
||||
|
||||
isc_loopmgr_setup(loopmgr, count, loopmgr);
|
||||
isc_loop_setup(DEFAULT_LOOP(loopmgr), shutdown_loopmgr, loopmgr);
|
||||
|
||||
isc_loopmgr_run(loopmgr);
|
||||
@@ -108,6 +109,35 @@ isc_loopmgr_test(void **state) {
|
||||
assert_int_equal(atomic_load(&scheduled), loopmgr->nloops);
|
||||
}
|
||||
|
||||
static void
|
||||
count2(void *arg) {
|
||||
isc_loopmgr_t *loopmgr = (isc_loopmgr_t *)arg;
|
||||
|
||||
atomic_fetch_add(&scheduled, 1);
|
||||
if (isc_loopmgr_tid() == 0) {
|
||||
isc_loopmgr_runjob(loopmgr, shutdown_loopmgr, loopmgr);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
runjob(void *arg) {
|
||||
isc_loopmgr_t *loopmgr = (isc_loopmgr_t *)arg;
|
||||
isc_loopmgr_runjob(loopmgr, count2, loopmgr);
|
||||
}
|
||||
|
||||
static void
|
||||
isc_loopmgr_runjob_test(void **state) {
|
||||
isc_loopmgr_t *loopmgr = *state;
|
||||
|
||||
atomic_store(&scheduled, 0);
|
||||
|
||||
isc_loopmgr_setup(loopmgr, runjob, loopmgr);
|
||||
|
||||
isc_loopmgr_run(loopmgr);
|
||||
|
||||
assert_int_equal(atomic_load(&scheduled), loopmgr->nloops);
|
||||
}
|
||||
|
||||
static void
|
||||
pause_loopmgr(void *arg) {
|
||||
isc_loopmgr_t *loopmgr = (isc_loopmgr_t *)arg;
|
||||
@@ -177,6 +207,9 @@ main(void) {
|
||||
cmocka_unit_test_setup_teardown(isc_loopmgr_pause_test,
|
||||
setup_loopmgr,
|
||||
teardown_loopmgr),
|
||||
cmocka_unit_test_setup_teardown(isc_loopmgr_runjob_test,
|
||||
setup_loopmgr,
|
||||
teardown_loopmgr),
|
||||
cmocka_unit_test_setup_teardown(isc_loopmgr_sigint_test,
|
||||
setup_loopmgr,
|
||||
teardown_loopmgr),
|
||||
|
||||
Reference in New Issue
Block a user