Change dns_message_create() function to accept memory pools

Instead of creating new memory pools for each new dns_message, change
dns_message_create() method to optionally accept externally created
dns_fixedname_t and dns_rdataset_t memory pools.  This allows us to
preallocate the memory pools in ns_client and dns_resolver units for the
lifetime of dns_resolver_t and ns_clientmgr_t.
This commit is contained in:
Ondřej Surý
2023-09-22 15:00:40 +02:00
parent 759a977a67
commit f5af981831
21 changed files with 194 additions and 168 deletions

View File

@@ -1959,7 +1959,8 @@ recvresponse(void *arg) {
fatal("request event result: %s", isc_result_totext(result));
}
dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
&response);
result = dns_request_getresponse(request, response,
DNS_MESSAGEPARSE_PRESERVEORDER);
@@ -2074,7 +2075,8 @@ sendquery(void *arg) {
/* Construct query message */
CHECK(convert_name(&qfn, &query_name, qname));
dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &message);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
&message);
message->opcode = dns_opcode_query;
message->flags = DNS_MESSAGEFLAG_RD | DNS_MESSAGEFLAG_AD;
if (cdflag) {

View File

@@ -2192,7 +2192,8 @@ setup_lookup(dig_lookup_t *lookup) {
debug("setup_lookup(%p)", lookup);
dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &lookup->sendmsg);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
&lookup->sendmsg);
if (lookup->new_search) {
debug("resetting lookup counter.");
@@ -4124,7 +4125,7 @@ recv_done(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region,
goto keep_query;
}
dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &msg);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &msg);
if (tsigkey != NULL) {
if (l->querysig == NULL) {

View File

@@ -364,7 +364,8 @@ reset_system(void) {
if (updatemsg != NULL) {
dns_message_reset(updatemsg, DNS_MESSAGE_INTENTRENDER);
} else {
dns_message_create(gmctx, DNS_MESSAGE_INTENTRENDER, &updatemsg);
dns_message_create(gmctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
&updatemsg);
}
updatemsg->opcode = dns_opcode_update;
if (usegsstsig) {
@@ -2470,7 +2471,7 @@ update_completed(void *arg) {
}
LOCK(&answer_lock);
dns_message_create(gmctx, DNS_MESSAGE_INTENTPARSE, &answer);
dns_message_create(gmctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &answer);
result = dns_request_getresponse(request, answer,
DNS_MESSAGEPARSE_PRESERVEORDER);
switch (result) {
@@ -2658,7 +2659,7 @@ recvsoa(void *arg) {
reqinfo = NULL;
ddebug("About to create rcvmsg");
dns_message_create(gmctx, DNS_MESSAGE_INTENTPARSE, &rcvmsg);
dns_message_create(gmctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &rcvmsg);
result = dns_request_getresponse(request, rcvmsg,
DNS_MESSAGEPARSE_PRESERVEORDER);
if (result == DNS_R_TSIGERRORSET && servers != NULL) {
@@ -3069,7 +3070,7 @@ start_gssrequest(dns_name_t *primary) {
keyname->attributes.nocompress = true;
rmsg = NULL;
dns_message_create(gmctx, DNS_MESSAGE_INTENTRENDER, &rmsg);
dns_message_create(gmctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER, &rmsg);
/* Build first request. */
context = GSS_C_NO_CONTEXT;
@@ -3184,7 +3185,7 @@ recvgss(void *arg) {
isc_mem_put(gmctx, reqinfo, sizeof(nsu_gssinfo_t));
ddebug("recvgss creating rcvmsg");
dns_message_create(gmctx, DNS_MESSAGE_INTENTPARSE, &rcvmsg);
dns_message_create(gmctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &rcvmsg);
result = dns_request_getresponse(request, rcvmsg,
DNS_MESSAGEPARSE_PRESERVEORDER);
@@ -3295,7 +3296,8 @@ start_update(void) {
return;
}
dns_message_create(gmctx, DNS_MESSAGE_INTENTRENDER, &soaquery);
dns_message_create(gmctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
&soaquery);
if (default_servers) {
soaquery->flags |= DNS_MESSAGEFLAG_RD;

View File

@@ -79,7 +79,8 @@ recvresponse(void *arg) {
exit(-1);
}
dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
&response);
result = dns_request_getresponse(request, response,
DNS_MESSAGEPARSE_PRESERVEORDER);
@@ -141,7 +142,8 @@ sendquery(void) {
dns_rootname, 0, NULL);
CHECK("dns_name_fromtext", result);
dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &message);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
&message);
message->opcode = dns_opcode_query;
message->flags |= DNS_MESSAGEFLAG_RD;

View File

@@ -270,7 +270,7 @@ process_message(isc_buffer_t *source) {
int i;
message = NULL;
dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &message);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &message);
result = dns_message_parse(message, source, parseflags);
if (result == DNS_R_RECOVERABLE) {
@@ -339,7 +339,8 @@ process_message(isc_buffer_t *source) {
isc_mem_stats(mctx, stdout);
}
dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &message);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
&message);
result = dns_message_parse(message, &buffer, parseflags);
CHECKRESULT(result, "dns_message_parse failed");

View File

@@ -211,7 +211,8 @@ recvresponse(void *arg) {
}
}
dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
&response);
parseflags |= DNS_MESSAGEPARSE_PRESERVEORDER;
if (besteffort) {
@@ -593,7 +594,8 @@ sendquery(struct query *query) {
dns_rootname, 0, NULL);
CHECK("dns_name_fromtext", result);
dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &message);
dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
&message);
message->opcode = dns_opcode_query;
if (query->recurse) {