local = &local_interface;
}
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_httpsocket, local, NULL);
http_initsocket(sock);
INSIST(session->handle->sock->tid == isc_tid());
worker = session->handle->sock->worker;
- socket = isc_mem_get(worker->mctx, sizeof(isc_nmsocket_t));
+ socket = isc_mempool_get(worker->nmsocket_pool);
local = isc_nmhandle_localaddr(session->handle);
isc__nmsocket_init(socket, worker, isc_nm_httpsocket, &local, NULL);
http_initsocket(socket);
REQUIRE(isc_tid() == 0);
worker = &mgr->workers[isc_tid()];
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_httplistener, iface, NULL);
http_initsocket(sock);
atomic_init(&sock->h2->max_concurrent_streams,
* How many isc_nmhandles and isc_nm_uvreqs will we be
* caching for reuse in a socket.
*/
+#define ISC_NM_NMSOCKET_MAX 64
#define ISC_NM_NMHANDLES_MAX 64
#define ISC_NM_UVREQS_MAX 64
ISC_LIST(isc_nmsocket_t) active_sockets;
+ isc_mempool_t *nmsocket_pool;
isc_mempool_t *uvreq_pool;
} isc__networker_t;
isc_mem_attach(loop->mctx, &worker->mctx);
+ isc_mempool_create(worker->mctx, sizeof(isc_nmsocket_t),
+ &worker->nmsocket_pool);
+ isc_mempool_setfreemax(worker->nmsocket_pool,
+ ISC_NM_NMSOCKET_MAX);
+
isc_mempool_create(worker->mctx, sizeof(isc__nm_uvreq_t),
&worker->uvreq_pool);
isc_mempool_setfreemax(worker->uvreq_pool, ISC_NM_UVREQS_MAX);
ISC_LIST_UNLINK(worker->active_sockets, sock, active_link);
- isc_mem_put(worker->mctx, sock, sizeof(*sock));
+ isc_mempool_put(worker->nmsocket_pool, sock);
}
isc__networker_detach(&worker);
isc_loop_detach(&worker->loop);
isc_mempool_destroy(&worker->uvreq_pool);
+ isc_mempool_destroy(&worker->nmsocket_pool);
isc_mem_putanddetach(&worker->mctx, worker->recvbuf,
ISC_NETMGR_RECVBUF_SIZE);
INSIST(type == isc_nm_proxystreamsocket ||
type == isc_nm_proxystreamlistener);
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, type, addr, NULL);
sock->result = ISC_R_UNSET;
if (type == isc_nm_proxystreamsocket) {
INSIST(type == isc_nm_proxyudpsocket ||
type == isc_nm_proxyudplistener);
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, type, addr, NULL);
sock->result = ISC_R_UNSET;
if (type == isc_nm_proxyudpsocket) {
INSIST(type == isc_nm_streamdnssocket ||
type == isc_nm_streamdnslistener);
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, type, addr, NULL);
sock->result = ISC_R_UNSET;
if (type == isc_nm_streamdnssocket) {
return;
}
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_tcpsocket, local, NULL);
sock->connect_timeout = timeout;
REQUIRE(workers <= mgr->nloops);
worker = &mgr->workers[0];
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_tcplistener, iface, NULL);
sock->nchildren = (workers == ISC_NM_LISTEN_ALL) ? (uint32_t)mgr->nloops
}
/* Prepare the child socket */
- isc_nmsocket_t *csock = isc_mem_get(ssock->worker->mctx,
- sizeof(isc_nmsocket_t));
+ isc_nmsocket_t *csock = isc_mempool_get(ssock->worker->nmsocket_pool);
isc__nmsocket_init(csock, ssock->worker, isc_nm_tcpsocket,
&ssock->iface, NULL);
isc__nmsocket_attach(ssock, &csock->server);
/*
* We need to create a 'wrapper' tlssocket for this connection.
*/
- tlssock = isc_mem_get(handle->sock->worker->mctx, sizeof(*tlssock));
+ tlssock = isc_mempool_get(handle->sock->worker->nmsocket_pool);
isc__nmsocket_init(tlssock, handle->sock->worker, isc_nm_tlssocket,
&local, NULL);
}
REQUIRE(workers <= mgr->nloops);
- tlssock = isc_mem_get(worker->mctx, sizeof(*tlssock));
-
+ tlssock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(tlssock, worker, isc_nm_tlslistener, iface, NULL);
tlssock->accept_cb = accept_cb;
tlssock->accept_cbarg = accept_cbarg;
return;
}
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_tlssocket, local, NULL);
sock->connect_cb = connect_cb;
sock->connect_cbarg = connect_cbarg;
}
REQUIRE(workers <= mgr->nloops);
- sock = isc_mem_get(worker->mctx, sizeof(isc_nmsocket_t));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_udplistener, iface, NULL);
sock->nchildren = (workers == ISC_NM_LISTEN_ALL) ? (uint32_t)mgr->nloops
return (result);
}
- sock = isc_mem_get(worker->mctx, sizeof(*sock));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_udpsocket, NULL, NULL);
sock->connect_cb = cb;
}
/* Initialize the new socket */
- /* FIXME: Use per-worker mempool for new sockets */
- sock = isc_mem_get(worker->mctx, sizeof(isc_nmsocket_t));
+ sock = isc_mempool_get(worker->nmsocket_pool);
isc__nmsocket_init(sock, worker, isc_nm_udpsocket, local, NULL);
sock->connect_cb = cb;