Lines Matching defs:loopmgr
63 isc_loopmgr_shutdown(isc_loopmgr_t *loopmgr) {
64 if (!atomic_compare_exchange_strong(&loopmgr->shuttingdown,
70 for (size_t i = 0; i < loopmgr->nloops; i++) {
71 isc_loop_t *loop = &loopmgr->loops[i];
81 isc_loopmgr_t *loopmgr = (isc_loopmgr_t *)arg;
86 isc_loopmgr_shutdown(loopmgr);
95 isc_loopmgr_t *loopmgr = loop->loopmgr;
100 (void)isc_barrier_wait(&loopmgr->pausing);
105 isc_loopmgr_t *loopmgr = loop->loopmgr;
107 (void)isc_barrier_wait(&loopmgr->resuming);
165 isc_loopmgr_t *loopmgr = loop->loopmgr;
173 if (DEFAULT_LOOP(loopmgr) == CURRENT_LOOP(loopmgr)) {
175 isc_signal_stop(loopmgr->sigterm);
176 isc_signal_stop(loopmgr->sigint);
179 isc_signal_destroy(&loopmgr->sigterm);
180 isc_signal_destroy(&loopmgr->sigint);
192 loop_init(isc_loop_t *loop, isc_loopmgr_t *loopmgr, uint32_t tid,
196 .loopmgr = loopmgr,
286 isc_barrier_wait(&helper->loopmgr->starting);
294 isc_barrier_wait(&helper->loopmgr->stopping);
302 isc_loopmgr_t *loopmgr = loop->loopmgr;
303 isc_loop_t *helper = &loopmgr->helpers[loop->tid];
320 isc_barrier_wait(&loopmgr->starting);
342 isc_barrier_wait(&loopmgr->stopping);
376 isc_loopmgr_t *loopmgr = NULL;
384 loopmgr = isc_mem_get(mctx, sizeof(*loopmgr));
385 *loopmgr = (isc_loopmgr_t){
389 isc_mem_attach(mctx, &loopmgr->mctx);
392 isc_barrier_init(&loopmgr->pausing, loopmgr->nloops * 2);
393 isc_barrier_init(&loopmgr->resuming, loopmgr->nloops * 2);
394 isc_barrier_init(&loopmgr->starting, loopmgr->nloops * 2);
395 isc_barrier_init(&loopmgr->stopping, loopmgr->nloops * 2);
397 loopmgr->loops = isc_mem_cget(loopmgr->mctx, loopmgr->nloops,
398 sizeof(loopmgr->loops[0]));
399 for (size_t i = 0; i < loopmgr->nloops; i++) {
400 isc_loop_t *loop = &loopmgr->loops[i];
401 loop_init(loop, loopmgr, i, "loop");
404 loopmgr->helpers = isc_mem_cget(loopmgr->mctx, loopmgr->nloops,
405 sizeof(loopmgr->helpers[0]));
406 for (size_t i = 0; i < loopmgr->nloops; i++) {
407 isc_loop_t *loop = &loopmgr->helpers[i];
408 loop_init(loop, loopmgr, i, "helper");
411 loopmgr->sigint = isc_signal_new(loopmgr, isc__loopmgr_signal, loopmgr,
413 loopmgr->sigterm = isc_signal_new(loopmgr, isc__loopmgr_signal, loopmgr,
416 isc_signal_start(loopmgr->sigint);
417 isc_signal_start(loopmgr->sigterm);
419 loopmgr->magic = LOOPMGR_MAGIC;
421 *loopmgrp = loopmgr;
429 isc_loopmgr_t *loopmgr = loop->loopmgr;
438 REQUIRE(loop->tid == isc_tid() || !atomic_load(&loopmgr->running) ||
439 atomic_load(&loopmgr->paused));
451 isc_loopmgr_t *loopmgr = loop->loopmgr;
459 REQUIRE(loop->tid == isc_tid() || !atomic_load(&loopmgr->running) ||
460 atomic_load(&loopmgr->paused));
469 isc_loopmgr_setup(isc_loopmgr_t *loopmgr, isc_job_cb cb, void *cbarg) {
470 REQUIRE(VALID_LOOPMGR(loopmgr));
471 REQUIRE(!atomic_load(&loopmgr->running) ||
472 atomic_load(&loopmgr->paused));
474 for (size_t i = 0; i < loopmgr->nloops; i++) {
475 isc_loop_t *loop = &loopmgr->loops[i];
481 isc_loopmgr_teardown(isc_loopmgr_t *loopmgr, isc_job_cb cb, void *cbarg) {
482 REQUIRE(VALID_LOOPMGR(loopmgr));
483 REQUIRE(!atomic_load(&loopmgr->running) ||
484 atomic_load(&loopmgr->paused));
486 for (size_t i = 0; i < loopmgr->nloops; i++) {
487 isc_loop_t *loop = &loopmgr->loops[i];
493 isc_loopmgr_run(isc_loopmgr_t *loopmgr) {
494 REQUIRE(VALID_LOOPMGR(loopmgr));
495 RUNTIME_CHECK(atomic_compare_exchange_strong(&loopmgr->running,
506 for (size_t i = 1; i < loopmgr->nloops; i++) {
508 isc_loop_t *loop = &loopmgr->loops[i];
516 isc_thread_main(loop_thread, &loopmgr->loops[0]);
520 isc_loopmgr_pause(isc_loopmgr_t *loopmgr) {
521 REQUIRE(VALID_LOOPMGR(loopmgr));
530 for (size_t i = 0; i < loopmgr->nloops; i++) {
531 isc_loop_t *helper = &loopmgr->helpers[i];
537 for (size_t i = 0; i < loopmgr->nloops; i++) {
538 isc_loop_t *loop = &loopmgr->loops[i];
549 RUNTIME_CHECK(atomic_compare_exchange_strong(&loopmgr->paused,
551 pause_loop(CURRENT_LOOP(loopmgr));
561 isc_loopmgr_resume(isc_loopmgr_t *loopmgr) {
562 REQUIRE(VALID_LOOPMGR(loopmgr));
570 RUNTIME_CHECK(atomic_compare_exchange_strong(&loopmgr->paused,
572 resume_loop(CURRENT_LOOP(loopmgr));
583 isc_loopmgr_t *loopmgr = NULL;
588 loopmgr = *loopmgrp;
591 RUNTIME_CHECK(atomic_compare_exchange_strong(&loopmgr->running,
595 for (size_t i = 0; i < loopmgr->nloops; i++) {
596 isc_loop_t *helper = &loopmgr->helpers[i];
601 for (size_t i = 1; i < loopmgr->nloops; i++) {
602 isc_loop_t *loop = &loopmgr->loops[i];
606 loopmgr->magic = 0;
608 for (size_t i = 0; i < loopmgr->nloops; i++) {
609 isc_loop_t *helper = &loopmgr->helpers[i];
612 isc_mem_cput(loopmgr->mctx, loopmgr->helpers, loopmgr->nloops,
613 sizeof(loopmgr->helpers[0]));
615 for (size_t i = 0; i < loopmgr->nloops; i++) {
616 isc_loop_t *loop = &loopmgr->loops[i];
619 isc_mem_cput(loopmgr->mctx, loopmgr->loops, loopmgr->nloops,
620 sizeof(loopmgr->loops[0]));
622 isc_barrier_destroy(&loopmgr->starting);
623 isc_barrier_destroy(&loopmgr->stopping);
624 isc_barrier_destroy(&loopmgr->resuming);
625 isc_barrier_destroy(&loopmgr->pausing);
627 isc_mem_putanddetach(&loopmgr->mctx, loopmgr, sizeof(*loopmgr));
631 isc_loopmgr_nloops(isc_loopmgr_t *loopmgr) {
632 REQUIRE(VALID_LOOPMGR(loopmgr));
634 return loopmgr->nloops;
645 isc_loop_main(isc_loopmgr_t *loopmgr) {
646 REQUIRE(VALID_LOOPMGR(loopmgr));
648 return DEFAULT_LOOP(loopmgr);
652 loopmgr, uint32_t tid) {
653 REQUIRE(VALID_LOOPMGR(loopmgr));
654 REQUIRE(tid < loopmgr->nloops);
656 return LOOP(loopmgr, tid);
660 isc_loopmgr_blocking(isc_loopmgr_t *loopmgr) {
661 REQUIRE(VALID_LOOPMGR(loopmgr));
663 isc_signal_stop(loopmgr->sigterm);
664 isc_signal_stop(loopmgr->sigint);
668 isc_loopmgr_nonblocking(isc_loopmgr_t *loopmgr) {
669 REQUIRE(VALID_LOOPMGR(loopmgr));
671 isc_signal_start(loopmgr->sigint);
672 isc_signal_start(loopmgr->sigterm);
679 return loop->loopmgr;