Lines Matching refs:manager
335 isc_socketmgr_t *manager;
386 /* Locked by manager lock. */
394 isc_socketmgr_t *manager;
582 return (sock->fd % sock->manager->nthreads);
626 "sockmgr %p thread %d: %s", thread->manager,
763 LOCK(&thread->manager->lock);
770 UNLOCK(&thread->manager->lock);
857 LOCK(&thread->manager->lock);
863 UNLOCK(&thread->manager->lock);
884 INSIST(fd >= 0 && fd < (int)thread->manager->maxsocks);
1538 inc_stats(sock->manager->stats, \
1547 inc_stats(sock->manager->stats, \
1577 inc_stats(sock->manager->stats,
1615 if (sock->manager->maxudp != 0 &&
1616 cc > (int)sock->manager->maxudp)
1690 if (sock->type == isc_sockettype_udp && sock->manager->maxudp != 0 &&
1691 write_count > sock->manager->maxudp)
1718 inc_stats(sock->manager->stats, \
1727 inc_stats(sock->manager->stats, \
1763 inc_stats(sock->manager->stats,
1769 inc_stats(sock->manager->stats,
1824 select_poke(thread->manager, thread->threadid, fd,
1827 inc_stats(thread->manager->stats, sock->statsindex[STATID_CLOSE]);
1831 dec_stats(thread->manager->stats,
1838 * update manager->maxfd here (XXX: this should be implemented more
1842 LOCK(&thread->manager->lock);
1863 UNLOCK(&thread->manager->lock);
1871 isc_socketmgr_t *manager = sock->manager;
1883 INSIST(sock->fd >= -1 && sock->fd < (int)manager->maxsocks);
1887 thread = &manager->threads[sock->threadid];
1897 LOCK(&manager->lock);
1899 ISC_LIST_UNLINK(manager->socklist, sock, link);
1901 if (ISC_LIST_EMPTY(manager->socklist)) {
1902 SIGNAL(&manager->shutdown_ok);
1905 /* can't unlock manager as its memory context is still used */
1908 UNLOCK(&manager->lock);
1912 allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type,
1916 sock = isc_mem_get(manager->mctx, sizeof(*sock));
1921 sock->manager = manager;
1987 isc_mem_put(sock->manager->mctx, sock, sizeof(*sock));
2168 opensocket(isc_socketmgr_t *manager, isc_socket_t *sock,
2253 if (manager->reserved != 0 && sock->type == isc_sockettype_udp &&
2254 sock->fd >= 0 && sock->fd < manager->reserved)
2257 newfd = fcntl(sock->fd, F_DUPFD, manager->reserved);
2274 if (sock->fd >= (int)manager->maxsocks) {
2279 sock->fd, manager->maxsocks);
2280 inc_stats(manager->stats, sock->statsindex[STATID_OPENFAIL]);
2294 inc_stats(manager->stats,
2306 inc_stats(manager->stats,
2314 inc_stats(manager->stats,
2327 inc_stats(manager->stats, sock->statsindex[STATID_OPENFAIL]);
2464 inc_stats(manager->stats, sock->statsindex[STATID_OPEN]);
2466 inc_stats(manager->stats, sock->statsindex[STATID_ACTIVE]);
2475 * by 'manager'. Events will be posted to 'task' and when dispatched
2480 socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
2487 REQUIRE(VALID_MANAGER(manager));
2491 result = allocate_socket(manager, type, &sock);
2519 result = opensocket(manager, sock, dup_socket);
2530 thread = &manager->threads[sock->threadid];
2551 LOCK(&manager->lock);
2552 ISC_LIST_APPEND(manager->socklist, sock, link);
2558 UNLOCK(&manager->lock);
2567 * Create a new 'type' socket managed by 'manager'. Events
2587 return (socket_create(sock->manager, sock->pf, sock->type, socketp,
2605 result = opensocket(sock->manager, sock, NULL);
2613 thread = &sock->manager->threads[sock->threadid];
2629 LOCK(&sock->manager->lock);
2633 UNLOCK(&sock->manager->lock);
2675 isc_socketmgr_t *manager;
2683 REQUIRE(sock->fd >= 0 && sock->fd < (int)sock->manager->maxsocks);
2691 manager = sock->manager;
2692 thread = &manager->threads[sock->threadid];
2821 isc_socketmgr_t *manager;
2836 manager = sock->manager;
2837 INSIST(VALID_MANAGER(manager));
2838 thread = &manager->threads[sock->threadid];
2943 } else if (fd >= (int)manager->maxsocks) {
2948 fd, manager->maxsocks);
2980 * We need to unlock sock->lock now to be able to lock manager->lock
2995 nthread = &manager->threads[NEWCONNSOCK(dev)->threadid];
3022 inc_stats(manager->stats,
3039 LOCK(&manager->lock);
3051 ISC_LIST_APPEND(manager->socklist, NEWCONNSOCK(dev), link);
3053 UNLOCK(&manager->lock);
3055 inc_stats(manager->stats, sock->statsindex[STATID_ACCEPT]);
3057 inc_stats(manager->stats, sock->statsindex[STATID_ACCEPTFAIL]);
3076 inc_stats(manager->stats, sock->statsindex[STATID_ACCEPTFAIL]);
3128 unwatch_fd(&sock->manager->threads[sock->threadid], sock->fd,
3167 unwatch_fd(&sock->manager->threads[sock->threadid], sock->fd,
3194 select_poke(sock->manager, sock->threadid, sock->fd,
3220 select_poke(sock->manager, sock->threadid, sock->fd,
3319 REQUIRE(events[i].ident < thread->manager->maxsocks);
3351 REQUIRE(events[i].data.fd < (int)thread->manager->maxsocks);
3395 REQUIRE(events[i].fd < (int)thread->manager->maxsocks);
3417 REQUIRE(maxfd <= (int)thread->manager->maxsocks);
3478 isc_socketmgr_t *manager = thread->manager;
3479 (void)manager;
3564 * manager lock and don't care
3566 LOCK(&manager->lock);
3572 UNLOCK(&manager->lock);
3633 isc_socketmgr_setreserved(isc_socketmgr_t *manager, uint32_t reserved) {
3634 REQUIRE(VALID_MANAGER(manager));
3636 manager->reserved = reserved;
3640 isc_socketmgr_maxudp(isc_socketmgr_t *manager, unsigned int maxudp) {
3641 REQUIRE(VALID_MANAGER(manager));
3643 manager->maxudp = maxudp;
3647 * Setup socket thread, thread->manager and thread->threadid must be filled.
3657 REQUIRE(VALID_MANAGER(thread->manager));
3659 thread->threadid < thread->manager->nthreads);
3662 isc_mem_get(thread->manager->mctx,
3663 thread->manager->maxsocks * sizeof(isc_socket_t *));
3666 thread->manager->maxsocks * sizeof(isc_socket_t *));
3668 thread->fdstate = isc_mem_get(thread->manager->mctx,
3669 thread->manager->maxsocks * sizeof(int));
3671 memset(thread->fdstate, 0, thread->manager->maxsocks * sizeof(int));
3673 thread->fdlock = isc_mem_get(thread->manager->mctx,
3690 thread->events = isc_mem_get(thread->manager->mctx,
3699 isc_mem_put(thread->manager->mctx, thread->events,
3707 isc_mem_put(thread->manager->mctx, thread->events,
3715 isc_mem_get(thread->manager->mctx,
3716 (thread->manager->maxsocks * sizeof(uint32_t)));
3719 thread->manager->maxsocks * sizeof(uint32_t));
3722 isc_mem_get(thread->manager->mctx,
3745 thread->events = isc_mem_get(thread->manager->mctx,
3753 isc_mem_get(thread->manager->mctx,
3754 sizeof(pollinfo_t) * thread->manager->maxsocks);
3756 sizeof(pollinfo_t) * thread->manager->maxsocks);
3763 isc_mem_put(thread->manager->mctx, thread->events,
3765 isc_mem_put(thread->manager->mctx, thread->fdpollinfo,
3766 sizeof(pollinfo_t) * thread->manager->maxsocks);
3772 isc_mem_put(thread->manager->mctx, thread->events,
3774 isc_mem_put(thread->manager->mctx, thread->fdpollinfo,
3775 sizeof(pollinfo_t) * thread->manager->maxsocks);
3789 thread->fd_bufsize = howmany(manager->maxsocks, NFDBITS) *
3795 thread->read_fds = isc_mem_get(thread->manager->mctx,
3797 thread->read_fds_copy = isc_mem_get(thread->manager->mctx,
3799 thread->write_fds = isc_mem_get(thread->manager->mctx,
3801 thread->write_fds_copy = isc_mem_get(thread->manager->mctx,
3836 sizeof(pollinfo_t) * thread->manager->maxsocks);
3851 for (i = 0; i < (int)thread->manager->maxsocks; i++) {
3859 isc_mem_put(thread->manager->mctx, thread->epoll_events,
3860 thread->manager->maxsocks * sizeof(uint32_t));
3862 isc_mem_put(thread->manager->mctx, thread->fds,
3863 thread->manager->maxsocks * sizeof(isc_socket_t *));
3864 isc_mem_put(thread->manager->mctx, thread->fdstate,
3865 thread->manager->maxsocks * sizeof(int));
3870 isc_mem_put(thread->manager->mctx, thread->fdlock,
3883 isc_socketmgr_t *manager;
3891 manager = isc_mem_get(mctx, sizeof(*manager));
3894 memset(manager, 0, sizeof(*manager));
3895 manager->maxsocks = maxsocks;
3896 manager->reserved = 0;
3897 manager->maxudp = 0;
3898 manager->nthreads = nthreads;
3899 manager->stats = NULL;
3901 manager->magic = SOCKET_MANAGER_MAGIC;
3902 manager->mctx = NULL;
3903 ISC_LIST_INIT(manager->socklist);
3904 isc_mutex_init(&manager->lock);
3905 isc_condition_init(&manager->shutdown_ok);
3910 manager->threads = isc_mem_get(mctx, sizeof(isc__socketthread_t) *
3911 manager->nthreads);
3912 isc_mem_attach(mctx, &manager->mctx);
3914 for (i = 0; i < manager->nthreads; i++) {
3915 manager->threads[i].manager = manager;
3916 manager->threads[i].threadid = i;
3917 setup_thread(&manager->threads[i]);
3918 isc_thread_create(netthread, &manager->threads[i],
3919 &manager->threads[i].thread);
3922 isc_thread_setname(manager->threads[i].thread, tname);
3925 *managerp = manager;
3931 isc_socketmgr_getmaxsockets(isc_socketmgr_t *manager, unsigned int *nsockp) {
3932 REQUIRE(VALID_MANAGER(manager));
3935 *nsockp = manager->maxsocks;
3941 isc_socketmgr_setstats(isc_socketmgr_t *manager, isc_stats_t *stats) {
3942 REQUIRE(VALID_MANAGER(manager));
3943 REQUIRE(ISC_LIST_EMPTY(manager->socklist));
3944 REQUIRE(manager->stats == NULL);
3947 isc_stats_attach(stats, &manager->stats);
3952 isc_socketmgr_t *manager;
3955 * Destroy a socket manager.
3959 manager = *managerp;
3960 REQUIRE(VALID_MANAGER(manager));
3962 LOCK(&manager->lock);
3967 while (!ISC_LIST_EMPTY(manager->socklist)) {
3968 manager_log(manager, CREATION, "sockets exist");
3969 WAIT(&manager->shutdown_ok, &manager->lock);
3972 UNLOCK(&manager->lock);
3979 for (int i = 0; i < manager->nthreads; i++) {
3980 select_poke(manager, i, 0, SELECT_POKE_SHUTDOWN);
3986 for (int i = 0; i < manager->nthreads; i++) {
3987 isc_thread_join(manager->threads[i].thread, NULL);
3988 cleanup_thread(manager->mctx, &manager->threads[i]);
3993 isc_mem_put(manager->mctx, manager->threads,
3994 sizeof(isc__socketthread_t) * manager->nthreads);
3995 (void)isc_condition_destroy(&manager->shutdown_ok);
3997 if (manager->stats != NULL) {
3998 isc_stats_detach(&manager->stats);
4000 isc_mutex_destroy(&manager->lock);
4001 manager->magic = 0;
4002 isc_mem_putanddetach(&manager->mctx, manager, sizeof(*manager));
4053 select_poke(sock->manager, sock->threadid, sock->fd,
4088 isc_socketmgr_t *manager;
4093 manager = sock->manager;
4094 REQUIRE(VALID_MANAGER(manager));
4098 dev = allocate_socketevent(manager->mctx, sock, ISC_SOCKEVENT_RECVDONE,
4202 select_poke(sock->manager, sock->threadid,
4250 isc_socketmgr_t *manager;
4257 manager = sock->manager;
4258 REQUIRE(VALID_MANAGER(manager));
4262 dev = allocate_socketevent(manager->mctx, sock, ISC_SOCKEVENT_SENDDONE,
4524 inc_stats(sock->manager->stats,
4704 isc_socketmgr_t *manager;
4711 manager = sock->manager;
4712 REQUIRE(VALID_MANAGER(manager));
4724 manager->mctx, task, ISC_SOCKEVENT_NEWCONN, action, arg,
4728 result = allocate_socket(manager, sock->type, &nsock);
4760 select_poke(manager, sock->threadid, sock->fd,
4772 isc_socketmgr_t *manager;
4782 manager = sock->manager;
4783 REQUIRE(VALID_MANAGER(manager));
4793 manager->mctx, sock, ISC_SOCKEVENT_CONNECT, action, arg,
4867 inc_stats(sock->manager->stats,
4877 inc_stats(sock->manager->stats,
4894 inc_stats(sock->manager->stats,
4918 select_poke(manager, sock->threadid, sock->fd,
4976 inc_stats(sock->manager->stats,
5012 inc_stats(sock->manager->stats,
5026 unwatch_fd(&sock->manager->threads[sock->threadid], sock->fd,
5638 * Create a new 'type' socket managed by 'manager'. Events
5644 isc_socket_fdwatchcreate(isc_socketmgr_t *manager, int fd, int flags,
5653 REQUIRE(VALID_MANAGER(manager));
5656 if (fd < 0 || (unsigned int)fd >= manager->maxsocks)
5659 result = allocate_socket(manager, isc_sockettype_fdwatch, &sock);
5671 thread = &manager->threads[sock->threadid];
5685 manager->epoll_events[sock->fd] = 0;
5693 LOCK(&manager->lock);
5694 ISC_LIST_APPEND(manager->socklist, sock, link);
5699 UNLOCK(&manager->lock);
5703 select_poke(sock->manager, sock->threadid, sock->fd,
5706 select_poke(sock->manager, sock->threadid, sock->fd,
5715 * Indicate to the manager that it should watch the socket again.
5734 select_poke(sock->manager, sock->threadid, sock->fd,
5737 select_poke(sock->manager, sock->threadid, sock->fd,