Home | History | Annotate | Download | only in netmgr

Lines Matching refs:mgr

260 	isc_nm_t *mgr = NULL;
289 mgr = isc_mem_get(mctx, sizeof(*mgr));
290 *mgr = (isc_nm_t){
295 isc_mem_attach(mctx, &mgr->mctx);
296 isc_mutex_init(&mgr->lock);
297 isc_condition_init(&mgr->wkstatecond);
298 isc_condition_init(&mgr->wkpausecond);
299 isc_refcount_init(&mgr->references, 1);
300 atomic_init(&mgr->maxudp, 0);
301 atomic_init(&mgr->interlocked, ISC_NETMGR_NON_INTERLOCKED);
302 atomic_init(&mgr->workers_paused, 0);
303 atomic_init(&mgr->paused, false);
304 atomic_init(&mgr->closing, false);
306 mgr->load_balance_sockets = true;
308 mgr->load_balance_sockets = false;
312 ISC_LIST_INIT(mgr->active_sockets);
319 atomic_init(&mgr->init, 30000);
320 atomic_init(&mgr->idle, 30000);
321 atomic_init(&mgr->keepalive, 30000);
322 atomic_init(&mgr->advertised, 30000);
324 isc_barrier_init(&mgr->pausing, mgr->nworkers);
325 isc_barrier_init(&mgr->resuming, mgr->nworkers);
327 mgr->workers = isc_mem_get(mctx,
328 mgr->nworkers * sizeof(isc__networker_t));
329 for (int i = 0; i < mgr->nworkers; i++) {
330 isc__networker_t *worker = &mgr->workers[i];
334 .mgr = mgr,
341 worker->loop.data = &mgr->workers[i];
360 mgr->workers_running++;
361 isc_thread_create(nm_thread, &mgr->workers[i], &worker->thread);
367 mgr->magic = NM_MAGIC;
368 *netmgrp = mgr;
379 isc_nm_t *mgr = *mgr0;
382 isc_refcount_destroy(&mgr->references);
384 mgr->magic = 0;
386 for (int i = 0; i < mgr->nworkers; i++) {
387 isc__networker_t *worker = &mgr->workers[i];
388 isc__netievent_t *event = isc__nm_get_netievent_stop(mgr);
392 LOCK(&mgr->lock);
393 while (mgr->workers_running > 0) {
394 WAIT(&mgr->wkstatecond, &mgr->lock);
396 UNLOCK(&mgr->lock);
398 for (int i = 0; i < mgr->nworkers; i++) {
399 isc__networker_t *worker = &mgr->workers[i];
411 isc_mem_put(mgr->mctx, worker->sendbuf,
413 isc_mem_put(mgr->mctx, worker->recvbuf,
418 if (mgr->stats != NULL) {
419 isc_stats_detach(&mgr->stats);
422 isc_barrier_destroy(&mgr->resuming);
423 isc_barrier_destroy(&mgr->pausing);
425 isc_condition_destroy(&mgr->wkstatecond);
426 isc_condition_destroy(&mgr->wkpausecond);
427 isc_mutex_destroy(&mgr->lock);
429 isc_mem_put(mgr->mctx, mgr->workers,
430 mgr->nworkers * sizeof(isc__networker_t));
431 isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
441 isc__nm_get_netievent_pause(worker->mgr);
455 isc_nm_pause(isc_nm_t *mgr) {
456 REQUIRE(VALID_NM(mgr));
457 REQUIRE(!atomic_load(&mgr->paused));
459 isc__nm_acquire_interlocked_force(mgr);
465 for (int i = 0; i < mgr->nworkers; i++) {
466 isc__networker_t *worker = &mgr->workers[i];
475 atomic_fetch_add(&mgr->workers_paused, 1);
476 isc_barrier_wait(&mgr->pausing);
479 LOCK(&mgr->lock);
480 while (atomic_load(&mgr->workers_paused) != mgr->workers_running) {
481 WAIT(&mgr->wkstatecond, &mgr->lock);
483 UNLOCK(&mgr->lock);
485 REQUIRE(atomic_compare_exchange_strong(&mgr->paused, &(bool){ false },
492 isc__nm_get_netievent_resume(worker->mgr);
505 isc_nm_resume(isc_nm_t *mgr) {
506 REQUIRE(VALID_NM(mgr));
507 REQUIRE(atomic_load(&mgr->paused));
511 drain_queue(&mgr->workers[isc_nm_tid()], NETIEVENT_PRIORITY);
514 for (int i = 0; i < mgr->nworkers; i++) {
515 isc__networker_t *worker = &mgr->workers[i];
524 drain_queue(&mgr->workers[isc_nm_tid()], NETIEVENT_PRIVILEGED);
526 atomic_fetch_sub(&mgr->workers_paused, 1);
527 isc_barrier_wait(&mgr->resuming);
530 LOCK(&mgr->lock);
531 while (atomic_load(&mgr->workers_paused) != 0) {
532 WAIT(&mgr->wkstatecond, &mgr->lock);
534 UNLOCK(&mgr->lock);
536 REQUIRE(atomic_compare_exchange_strong(&mgr->paused, &(bool){ true },
539 isc__nm_drop_interlocked(mgr);
543 isc_nm_attach(isc_nm_t *mgr, isc_nm_t **dst) {
544 REQUIRE(VALID_NM(mgr));
547 isc_refcount_increment(&mgr->references);
549 *dst = mgr;
554 isc_nm_t *mgr = NULL;
559 mgr = *mgr0;
562 if (isc_refcount_decrement(&mgr->references) == 1) {
563 nm_destroy(&mgr);
568 isc__netmgr_shutdown(isc_nm_t *mgr) {
569 REQUIRE(VALID_NM(mgr));
571 atomic_store(&mgr->closing, true);
572 for (int i = 0; i < mgr->nworkers; i++) {
574 event = isc__nm_get_netievent_shutdown(mgr);
575 isc__nm_enqueue_ievent(&mgr->workers[i], event);
581 isc_nm_t *mgr = NULL;
586 mgr = *netmgrp;
591 isc__netmgr_shutdown(mgr);
596 while (isc_refcount_current(&mgr->references) > 1 && counter++ < 1000) {
601 if (isc_refcount_current(&mgr->references) > 1) {
602 isc__nm_dump_active(mgr);
610 while (isc_refcount_current(&mgr->references) > 1) {
621 isc_nm_maxudp(isc_nm_t *mgr, uint32_t maxudp) {
622 REQUIRE(VALID_NM(mgr));
624 atomic_store(&mgr->maxudp, maxudp);
636 isc_nm_settimeouts(isc_nm_t *mgr, uint32_t init, uint32_t idle,
638 REQUIRE(VALID_NM(mgr));
640 atomic_store(&mgr->init, init);
641 atomic_store(&mgr->idle, idle);
642 atomic_store(&mgr->keepalive, keepalive);
643 mgr->advertised, advertised);
647 isc_nm_getloadbalancesockets(isc_nm_t *mgr) {
648 REQUIRE(VALID_NM(mgr));
650 return (mgr->load_balance_sockets);
654 isc_nm_setloadbalancesockets(isc_nm_t *mgr, bool enabled) {
655 REQUIRE(VALID_NM(mgr));
658 mgr->load_balance_sockets = enabled;
665 isc_nm_gettimeouts(isc_nm_t *mgr, uint32_t *initial, uint32_t *idle,
667 REQUIRE(VALID_NM(mgr));
670 *initial = atomic_load(&mgr->init);
674 *idle = atomic_load(&mgr->idle);
678 *keepalive = atomic_load(&mgr->keepalive);
682 *advertised = atomic_load(&mgr->advertised);
716 isc_nm_t *mgr = worker->mgr;
731 INSIST(atomic_load(&mgr->interlocked) != isc_nm_tid());
733 atomic_fetch_add(&mgr->workers_paused, 1);
734 if (isc_barrier_wait(&mgr->pausing) != 0) {
735 LOCK(&mgr->lock);
736 SIGNAL(&mgr->wkstatecond);
737 UNLOCK(&mgr->lock);
750 atomic_fetch_sub(&mgr->workers_paused, 1);
751 if (isc_barrier_wait(&mgr->resuming) != 0) {
752 LOCK(&mgr->lock);
753 SIGNAL(&mgr->wkstatecond);
754 UNLOCK(&mgr->lock);
778 LOCK(&mgr->lock);
779 mgr->workers_running--;
780 SIGNAL(&mgr->wkstatecond);
781 UNLOCK(&mgr->lock);
935 worker->mgr, (isc__netievent_##type##_t *)ievent); \
942 isc__nm_put_netievent_##type(worker->mgr, ievent); \
1044 isc__nm_get_netievent(isc_nm_t *mgr, isc__netievent_type type) {
1045 isc__netievent_storage_t *event = isc_mem_get(mgr->mctx,
1054 isc__nm_put_netievent(isc_nm_t *mgr, void *ievent) {
1055 isc_mem_put(mgr->mctx, ievent, sizeof(isc__netievent_storage_t));
1237 isc_mem_put(sock->mgr->mctx, sock->children,
1243 isc__nm_decstats(sock->mgr, sock->statsindex[STATID_ACTIVE]);
1261 isc_mem_free(sock->mgr->mctx, sock->buf);
1273 isc_mem_put(sock->mgr->mctx, uvreq, sizeof(*uvreq));
1283 LOCK(&sock->mgr->lock);
1284 mgr->active_sockets, sock, active_link);
1285 UNLOCK(&sock->mgr->lock);
1288 isc_nm_t *mgr = sock->mgr;
1289 isc_mem_put(mgr->mctx, sock, sizeof(*sock));
1290 isc_nm_detach(&mgr);
1292 isc_nm_detach(&sock->mgr);
1442 isc___nmsocket_init(isc_nmsocket_t *sock, isc_nm_t *mgr, isc_nmsocket_type type,
1447 REQUIRE(mgr != NULL);
1456 mgr->mctx, ISC_NM_HANDLES_STACK_SIZE),
1458 mgr->mctx, ISC_NM_REQS_STACK_SIZE) };
1464 LOCK(&mgr->lock);
1465 ISC_LIST_APPEND(mgr->active_sockets, sock, active_link);
1466 UNLOCK(&mgr->lock);
1469 isc_nm_attach(mgr, &sock->mgr);
1482 isc__nm_incstats(sock->mgr, sock->statsindex[STATID_ACTIVE]);
1493 isc__nm_incstats(sock->mgr, sock->statsindex[STATID_ACTIVE]);
1546 worker = &sock->mgr->workers[sock->tid];
1555 isc_mem_get(sock->mgr->mctx,
1671 isc_mem_put(sock->mgr->mctx, handle, sizeof(isc_nmhandle_t) + extra);
1722 isc__nm_get_netievent_detach(sock->mgr, sock);
1729 isc__nm_enqueue_ievent(&sock->mgr->workers[sock->tid],
1778 isc__nm_get_netievent_close(sock->mgr, sock);
1779 isc__nm_enqueue_ievent(&sock->mgr->workers[sock->tid],
1823 sock->buf = isc_mem_allocate(sock->mgr->mctx, alloc_len);
1827 sock->buf = isc_mem_reallocate(sock->mgr->mctx, sock->buf,
2070 req = isc__nm_uvreq_get(sock->mgr, sock);
2110 worker = &sock->mgr->workers[sock->tid];
2193 return (atomic_load(&sock->mgr->closing));
2199 atomic_load(&sock->mgr->closing) ||
2333 sock->read_timeout = value ? atomic_load(&sock->mgr->keepalive)
2334 : atomic_load(&sock->mgr->idle);
2335 sock->write_timeout = value ? atomic_load(&sock->mgr->keepalive)
2336 : atomic_load(&sock->mgr->idle);
2372 return (handle->sock->mgr);
2376 isc___nm_uvreq_get(isc_nm_t *mgr, isc_nmsocket_t *sock FLARG) {
2379 REQUIRE(VALID_NM(mgr));
2388 req = isc_mem_get(mgr->mctx, sizeof(*req));
2426 isc_mem_put(sock->mgr->mctx, req, sizeof(*req));
2429 isc_mem_put(sock->mgr->mctx, req, sizeof(*req));
2568 isc__nm_get_netievent_connectcb(sock->mgr, sock, uvreq,
2570 isc__nm_enqueue_ievent(&sock->mgr->workers[sock->tid],
2610 sock->mgr, sock, uvreq, eresult);
2611 isc__nm_enqueue_ievent(&sock->mgr->workers[sock->tid],
2655 isc__nm_get_netievent_sendcb(sock->mgr, sock, uvreq, eresult);
2656 isc__nm_enqueue_ievent(&sock->mgr->workers[sock->tid],
2811 isc__nm_acquire_interlocked(isc_nm_t *mgr) {
2816 LOCK(&mgr->lock);
2818 &mgr->interlocked, &(int){ ISC_NETMGR_NON_INTERLOCKED },
2821 UNLOCK(&mgr->lock);
2826 isc__nm_drop_interlocked(isc_nm_t *mgr) {
2831 LOCK(&mgr->lock);
2832 int tid = atomic_exchange(&mgr->interlocked,
2835 BROADCAST(&mgr->wkstatecond);
2836 UNLOCK(&mgr->lock);
2840 isc__nm_acquire_interlocked_force(isc_nm_t *mgr) {
2845 LOCK(&mgr->lock);
2847 &mgr->interlocked, &(int){ ISC_NETMGR_NON_INTERLOCKED },
2850 WAIT(&mgr->wkstatecond, &mgr->lock);
2852 UNLOCK(&mgr->lock);
2856 isc_nm_setstats(isc_nm_t *mgr, isc_stats_t *stats) {
2857 REQUIRE(VALID_NM(mgr));
2858 REQUIRE(mgr->stats == NULL);
2861 isc_stats_attach(stats, &mgr->stats);
2865 isc__nm_incstats(isc_nm_t *mgr, isc_statscounter_t counterid) {
2866 REQUIRE(VALID_NM(mgr));
2869 if (mgr->stats != NULL) {
2870 isc_stats_increment(mgr->stats, counterid);
2875 isc__nm_decstats(isc_nm_t *mgr, isc_statscounter_t counterid) {
2876 REQUIRE(VALID_NM(mgr));
2879 if (mgr->stats != NULL) {
2880 isc_stats_decrement(mgr->stats, counterid);
3241 worker = &sock->mgr->workers[isc_nm_tid()];
3243 timer = isc_mem_get(sock->mgr->mctx, sizeof(*timer));
3269 isc_mem_t *mctx = timer->handle->sock->mgr->mctx;