client_setup_tcp_buffer(ns_client_t *client) {
REQUIRE(client->tcpbuf == NULL);
- client->tcpbuf = isc_mempool_get(client->manager->tcp_buffers);
+ client->tcpbuf = client->manager->tcp_buffer;
client->tcpbuf_size = NS_CLIENT_TCP_BUFFER_SIZE;
}
return;
}
- if (client->tcpbuf_size == NS_CLIENT_TCP_BUFFER_SIZE) {
- isc_mempool_put(client->manager->tcp_buffers, client->tcpbuf);
- } else {
+ if (client->tcpbuf != client->manager->tcp_buffer) {
isc_mem_put(client->manager->send_mctx, client->tcpbuf,
client->tcpbuf_size);
}
+ client->tcpbuf = NULL;
client->tcpbuf_size = 0;
}
if (isc_buffer_base(buffer) == client->tcpbuf) {
size_t used = isc_buffer_usedlength(buffer);
- const size_t threshold = (3 * NS_CLIENT_TCP_BUFFER_SIZE) / 4;
-
INSIST(client->tcpbuf_size == NS_CLIENT_TCP_BUFFER_SIZE);
+
/*
* Copy the data into a smaller buffer before sending,
* and keep the original big TCP send buffer for reuse
* by other clients.
*/
- if (used > threshold) {
- /*
- * The data in the buffer is very large, so there is
- * no point in using a smaller buffer.
- */
- r.base = buffer->base;
- } else if (used > NS_CLIENT_SEND_BUFFER_SIZE) {
+ if (used > NS_CLIENT_SEND_BUFFER_SIZE) {
/*
* We can save space by allocating a new buffer with a
* correct size and freeing the big buffer.
client->magic = 0;
- isc_mem_put(manager->send_mctx, client->sendbuf,
- NS_CLIENT_SEND_BUFFER_SIZE);
if (client->opt != NULL) {
INSIST(dns_rdataset_isassociated(client->opt));
dns_rdataset_disassociate(client->opt);
client->manager->rdspool,
DNS_MESSAGE_INTENTPARSE, &client->message);
- client->sendbuf = isc_mem_get(client->manager->send_mctx,
- NS_CLIENT_SEND_BUFFER_SIZE);
-
/*
* Set magic earlier than usual because ns_query_init()
* and the functions it calls will require it.
*client = (ns_client_t){
.magic = 0,
.manager = client->manager,
- .sendbuf = client->sendbuf,
.message = client->message,
.query = client->query,
};
return (ISC_R_SUCCESS);
cleanup:
- isc_mem_put(client->manager->send_mctx, client->sendbuf,
- NS_CLIENT_SEND_BUFFER_SIZE);
dns_message_detach(&client->message);
ns_clientmgr_detach(&client->manager);
dns_message_destroypools(&manager->rdspool, &manager->namepool);
- isc_mempool_destroy(&manager->tcp_buffers);
-
isc_mem_detach(&manager->send_mctx);
isc_mem_putanddetach(&manager->mctx, manager, sizeof(*manager));
*/
(void)isc_mem_arena_set_muzzy_decay_ms(manager->send_mctx, 0);
- isc_mempool_create(manager->send_mctx,
- (size_t)NS_CLIENT_TCP_BUFFER_SIZE,
- &manager->tcp_buffers);
- isc_mempool_setfillcount(manager->tcp_buffers, TCPBUFFERS_FILLCOUNT);
- isc_mempool_setfreemax(manager->tcp_buffers, TCPBUFFERS_FREEMAX);
- isc_mempool_setname(manager->tcp_buffers, "ns_clientmgr_tcp");
-
manager->magic = MANAGER_MAGIC;
MTRACE("create");