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);
/* 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) {
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.");
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) {
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) {
}
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) {
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) {
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;
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);
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;
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);
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;
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) {
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");
}
}
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
+ &response);
parseflags |= DNS_MESSAGEPARSE_PRESERVEORDER;
if (besteffort) {
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) {
+++ /dev/null
-@@
-statement S;
-expression V;
-@@
-
-- V =
- dns_message_create(...);
-- if (V != ISC_R_SUCCESS) S
-
-@@
-statement S1, S2;
-expression V;
-@@
-
-- V =
- dns_message_create(...);
-- if (V == ISC_R_SUCCESS)
- S1
-- else S2
-
-@@
-expression V;
-@@
-
-- V =
- dns_message_create(...);
-- check_result(V, ...);
-
-@@
-@@
-
-- CHECK(
- dns_message_create(...)
-- )
- ;
-
-@@
-@@
-
-- DO(...,
- dns_message_create(...)
-- )
- ;
-
-@@
-@@
-
-- RETERR(
- dns_message_create(...)
-- )
- ;
-
-@@
-expression V;
-@@
-
-- V =
- dns_message_create(...);
-- assert_int_equal(V, ISC_R_SUCCESS);
-
-@@
-expression V;
-@@
-
-- V =
- dns_message_create(...);
-- CHECK(..., V);
-
-@@
-expression V;
-@@
-
-- V =
- dns_message_create(...);
-- RUNTIME_CHECK(V == ISC_R_SUCCESS);
isc_buffer_putmem(&b, data, size);
}
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &message);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &message);
result = dns_message_parse(message, &b, 0);
if (debug) {
isc_result_t result;
dns_message_t *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, input, DNS_MESSAGEPARSE_BESTEFFORT);
if (result == DNS_R_RECOVERABLE) {
isc_buffer_init(&b, d->msgdata.base, d->msgdata.length);
isc_buffer_add(&b, d->msgdata.length);
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &d->msg);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &d->msg);
result = dns_message_parse(d->msg, &b, 0);
if (result != ISC_R_SUCCESS) {
if (result != DNS_R_RECOVERABLE) {
/*
* These tell the message library how the created dns_message_t will be used.
*/
-#define DNS_MESSAGE_INTENTUNKNOWN 0 /*%< internal use only */
-#define DNS_MESSAGE_INTENTPARSE 1 /*%< parsing messages */
-#define DNS_MESSAGE_INTENTRENDER 2 /*%< rendering */
+typedef enum dns_message_intent {
+ DNS_MESSAGE_INTENTUNKNOWN = 0, /*%< internal use only */
+ DNS_MESSAGE_INTENTPARSE = 1, /*%< parsing messages */
+ DNS_MESSAGE_INTENTRENDER = 2, /*%< rendering */
+} dns_message_intent_t;
/*
* Control behavior of parsing
dns_rdataset_t *sig0;
dns_rdataset_t *tsig;
- int state;
- unsigned int from_to_wire : 2;
- unsigned int header_ok : 1;
- unsigned int question_ok : 1;
- unsigned int tcp_continuation : 1;
- unsigned int verified_sig : 1;
- unsigned int verify_attempted : 1;
- unsigned int free_query : 1;
- unsigned int free_saved : 1;
- unsigned int cc_ok : 1;
- unsigned int cc_bad : 1;
- unsigned int cc_echoed : 1;
- unsigned int tkey : 1;
- unsigned int rdclass_set : 1;
- unsigned int fuzzing : 1;
+ int state;
+ unsigned int : 0; /* bits */
+ dns_message_intent_t from_to_wire : 2; /* 2 */
+ unsigned int header_ok : 1; /* 3 */
+ unsigned int question_ok : 1; /* 4 */
+ unsigned int tcp_continuation : 1; /* 5 */
+ unsigned int verified_sig : 1; /* 6 */
+ unsigned int verify_attempted : 1; /* 7 */
+ unsigned int free_query : 1; /* 8 */
+ unsigned int free_saved : 1; /* 9 */
+ unsigned int cc_ok : 1; /* 10 */
+ unsigned int cc_bad : 1; /* 11 */
+ unsigned int cc_echoed : 1; /* 12 */
+ unsigned int tkey : 1; /* 13 */
+ unsigned int rdclass_set : 1; /* 14 */
+ unsigned int fuzzing : 1; /* 15 */
+ unsigned int free_pools : 1; /* 16 */
+ unsigned int : 0;
unsigned int opt_reserved;
unsigned int sig_reserved;
ISC_LANG_BEGINDECLS
void
-dns_message_create(isc_mem_t *mctx, unsigned int intent, dns_message_t **msgp);
-
+dns_message_create(isc_mem_t *mctx, isc_mempool_t *namepool,
+ isc_mempool_t *rdspool, dns_message_intent_t intent,
+ dns_message_t **msgp);
/*%<
* Create msg structure.
*
*
*\li 'msgp' be non-null and '*msg' be NULL.
*
+ *\li 'namepool' and 'rdspool' must be either both NULL or both valid
+ * isc_mempool_t
+ *
*\li 'intent' must be one of DNS_MESSAGE_INTENTPARSE or
* #DNS_MESSAGE_INTENTRENDER.
*
* Ensures:
*\li The data in "*msg" is set to indicate an unused and empty msg
* structure.
- *
- * Returns:
- *\li #ISC_R_NOMEMORY -- out of memory
- *\li #ISC_R_SUCCESS -- success
*/
void
-dns_message_reset(dns_message_t *msg, unsigned int intent);
+dns_message_reset(dns_message_t *msg, dns_message_intent_t intent);
/*%<
* Reset a message structure to default state. All internal lists are freed
* or reset to a default state as well. This is simply a more efficient
*\li 'intent' is DNS_MESSAGE_INTENTPARSE or DNS_MESSAGE_INTENTRENDER
*/
-#if DNS_NTA_TRACE
+#if DNS_MESSAGE_TRACE
#define dns_message_ref(ptr) dns_message__ref(ptr, __func__, __FILE__, __LINE__)
#define dns_message_unref(ptr) \
dns_message__unref(ptr, __func__, __FILE__, __LINE__)
* \li 'pttl != NULL'.
*/
+void
+dns_message_createpools(isc_mem_t *mctx, isc_mempool_t **namepoolp,
+ isc_mempool_t **rdspoolp);
+void
+dns_message_destroypools(isc_mempool_t **namepoolp, isc_mempool_t **rdspoolp);
+
ISC_LANG_ENDDECLS
if (!everything) {
msginit(msg);
}
-
- ENSURE(isc_mempool_getallocated(msg->namepool) == 0);
- ENSURE(isc_mempool_getallocated(msg->rdspool) == 0);
}
static unsigned int
}
void
-dns_message_create(isc_mem_t *mctx, unsigned int intent, dns_message_t **msgp) {
- dns_message_t *msg = NULL;
- isc_buffer_t *dynbuf = NULL;
-
+dns_message_create(isc_mem_t *mctx, isc_mempool_t *namepool,
+ isc_mempool_t *rdspool, dns_message_intent_t intent,
+ dns_message_t **msgp) {
REQUIRE(mctx != NULL);
REQUIRE(msgp != NULL);
REQUIRE(*msgp == NULL);
REQUIRE(intent == DNS_MESSAGE_INTENTPARSE ||
intent == DNS_MESSAGE_INTENTRENDER);
+ REQUIRE((namepool != NULL && rdspool != NULL) ||
+ (namepool == NULL && rdspool == NULL));
- msg = isc_mem_get(mctx, sizeof(dns_message_t));
+ dns_message_t *msg = isc_mem_get(mctx, sizeof(dns_message_t));
*msg = (dns_message_t){
.from_to_wire = intent,
.references = ISC_REFCOUNT_INITIALIZER(1),
.freerdata = ISC_LIST_INITIALIZER,
.freerdatalist = ISC_LIST_INITIALIZER,
.magic = DNS_MESSAGE_MAGIC,
+ .namepool = namepool,
+ .rdspool = rdspool,
};
isc_mem_attach(mctx, &msg->mctx);
+
+ if (namepool == NULL && rdspool == NULL) {
+ dns_message_createpools(mctx, &msg->namepool, &msg->rdspool);
+ msg->free_pools = true;
+ }
+
msginit(msg);
for (size_t i = 0; i < DNS_SECTION_MAX; i++) {
ISC_LIST_INIT(msg->sections[i]);
}
- isc_mempool_create(msg->mctx, sizeof(dns_fixedname_t), &msg->namepool);
- isc_mempool_setfillcount(msg->namepool, NAME_FILLCOUNT);
- isc_mempool_setfreemax(msg->namepool, NAME_FREEMAX);
- isc_mempool_setname(msg->namepool, "dns_fixedname_pool");
-
- isc_mempool_create(msg->mctx, sizeof(dns_rdataset_t), &msg->rdspool);
- isc_mempool_setfillcount(msg->rdspool, RDATASET_FILLCOUNT);
- isc_mempool_setfreemax(msg->rdspool, RDATASET_FREEMAX);
- isc_mempool_setname(msg->rdspool, "dns_rdataset_pool");
-
+ isc_buffer_t *dynbuf = NULL;
isc_buffer_allocate(mctx, &dynbuf, SCRATCHPAD_SIZE);
ISC_LIST_APPEND(msg->scratchpad, dynbuf, link);
}
void
-dns_message_reset(dns_message_t *msg, unsigned int intent) {
+dns_message_reset(dns_message_t *msg, dns_message_intent_t intent) {
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(intent == DNS_MESSAGE_INTENTPARSE ||
intent == DNS_MESSAGE_INTENTRENDER);
REQUIRE(DNS_MESSAGE_VALID(msg));
msgreset(msg, true);
- isc_mempool_destroy(&msg->namepool);
- isc_mempool_destroy(&msg->rdspool);
+
msg->magic = 0;
+
+ if (msg->free_pools) {
+ dns_message_destroypools(&msg->namepool, &msg->rdspool);
+ }
+
isc_mem_putanddetach(&msg->mctx, msg, sizeof(dns_message_t));
}
return (ISC_R_SUCCESS);
}
+
+void
+dns_message_createpools(isc_mem_t *mctx, isc_mempool_t **namepoolp,
+ isc_mempool_t **rdspoolp) {
+ REQUIRE(mctx != NULL);
+ REQUIRE(namepoolp != NULL && *namepoolp == NULL);
+ REQUIRE(rdspoolp != NULL && *rdspoolp == NULL);
+
+ isc_mempool_create(mctx, sizeof(dns_fixedname_t), namepoolp);
+ isc_mempool_setfillcount(*namepoolp, NAME_FILLCOUNT);
+ isc_mempool_setfreemax(*namepoolp, NAME_FREEMAX);
+ isc_mempool_setname(*namepoolp, "dns_fixedname_pool");
+
+ isc_mempool_create(mctx, sizeof(dns_rdataset_t), rdspoolp);
+ isc_mempool_setfillcount(*rdspoolp, RDATASET_FILLCOUNT);
+ isc_mempool_setfreemax(*rdspoolp, RDATASET_FREEMAX);
+ isc_mempool_setname(*rdspoolp, "dns_rdataset_pool");
+}
+
+void
+dns_message_destroypools(isc_mempool_t **namepoolp, isc_mempool_t **rdspoolp) {
+ REQUIRE(namepoolp != NULL && *namepoolp != NULL);
+ REQUIRE(rdspoolp != NULL && *rdspoolp != NULL);
+
+ ENSURE(isc_mempool_getallocated(*namepoolp) == 0);
+ ENSURE(isc_mempool_getallocated(*rdspoolp) == 0);
+
+ isc_mempool_destroy(rdspoolp);
+ isc_mempool_destroy(namepoolp);
+}
/* Atomic. */
atomic_uint_fast32_t nfctx;
+
+ uint32_t nloops;
+
+ isc_mempool_t **namepools;
+ isc_mempool_t **rdspools;
};
#define RES_MAGIC ISC_MAGIC('R', 'e', 's', '!')
* remain valid until this query is canceled.
*/
- dns_message_create(fctx->mctx, DNS_MESSAGE_INTENTPARSE,
- &query->rmessage);
+ dns_message_create(fctx->mctx, fctx->res->namepools[fctx->tid],
+ fctx->res->rdspools[fctx->tid],
+ DNS_MESSAGE_INTENTPARSE, &query->rmessage);
query->start = isc_time_now();
/*
goto cleanup_fcount;
}
- dns_message_create(fctx->mctx, DNS_MESSAGE_INTENTRENDER,
- &fctx->qmessage);
+ dns_message_create(fctx->mctx, fctx->res->namepools[fctx->tid],
+ fctx->res->rdspools[fctx->tid],
+ DNS_MESSAGE_INTENTRENDER, &fctx->qmessage);
/*
* Compute an expiration time for the entire fetch.
dns_badcache_destroy(&res->badcache);
dns_view_weakdetach(&res->view);
+
+ for (size_t i = 0; i < res->nloops; i++) {
+ dns_message_destroypools(&res->namepools[i], &res->rdspools[i]);
+ }
+ isc_mem_cput(res->mctx, res->rdspools, res->nloops,
+ sizeof(res->rdspools[0]));
+ isc_mem_cput(res->mctx, res->namepools, res->nloops,
+ sizeof(res->namepools[0]));
+
isc_mem_putanddetach(&res->mctx, res, sizeof(*res));
}
.maxdepth = DEFAULT_RECURSION_DEPTH,
.maxqueries = DEFAULT_MAX_QUERIES,
.alternates = ISC_LIST_INITIALIZER,
+ .nloops = isc_loopmgr_nloops(loopmgr),
};
RTRACE("create");
if (dispatchv4 != NULL) {
dns_dispatchset_create(res->mctx, dispatchv4, &res->dispatches4,
- isc_loopmgr_nloops(res->loopmgr));
+ res->nloops);
}
if (dispatchv6 != NULL) {
dns_dispatchset_create(res->mctx, dispatchv6, &res->dispatches6,
- isc_loopmgr_nloops(res->loopmgr));
+ res->nloops);
}
isc_mutex_init(&res->lock);
dns_nametree_create(res->mctx, DNS_NAMETREE_BOOL,
"dnssec-must-be-secure", &res->mustbesecure);
+ res->namepools = isc_mem_cget(res->mctx, res->nloops,
+ sizeof(res->namepools[0]));
+ res->rdspools = isc_mem_cget(res->mctx, res->nloops,
+ sizeof(res->rdspools[0]));
+ for (size_t i = 0; i < res->nloops; i++) {
+ isc_loop_t *loop = isc_loop_get(res->loopmgr, i);
+ isc_mem_t *pool_mctx = isc_loop_getmctx(loop);
+
+ dns_message_createpools(pool_mctx, &res->namepools[i],
+ &res->rdspools[i]);
+ }
+
res->magic = RES_MAGIC;
*resp = res;
LIBDNS_XFRIN_RECV_SEND_REQUEST(xfr, xfr->info);
/* Create the request message */
- dns_message_create(xfr->mctx, DNS_MESSAGE_INTENTRENDER, &msg);
+ dns_message_create(xfr->mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
+ &msg);
CHECK(dns_message_settsigkey(msg, xfr->tsigkey));
/* Create a name for the question section. */
xfrin_log(xfr, ISC_LOG_DEBUG(7), "received %u bytes", region->length);
- dns_message_create(xfr->mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(xfr->mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
+ &msg);
CHECK(dns_message_settsigkey(msg, xfr->tsigkey));
dns_message_setquerytsig(msg, xfr->lasttsig);
dns_name_t *qname = NULL;
dns_rdataset_t *qrdataset = NULL;
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTRENDER, &message);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
+ &message);
message->opcode = dns_opcode_query;
message->rdclass = zone->rdclass;
goto cleanup;
}
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
+ &msg);
result = dns_request_getresponse(request, msg, 0);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_INFO,
goto next_primary;
}
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
+ &msg);
result = dns_request_getresponse(request, msg, 0);
if (result != ISC_R_SUCCESS) {
goto next_primary;
}
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
+ &msg);
result = dns_request_getresponse(request, msg, 0);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_INFO,
REQUIRE(DNS_ZONE_VALID(zone));
REQUIRE(messagep != NULL && *messagep == NULL);
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTRENDER, &message);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
+ &message);
message->opcode = dns_opcode_notify;
message->flags |= DNS_MESSAGEFLAG_AA;
isc_buffer_init(&buf, rcode, sizeof(rcode));
isc_sockaddr_format(¬ify->dst, addrbuf, sizeof(addrbuf));
- dns_message_create(notify->zone->mctx, DNS_MESSAGE_INTENTPARSE,
- &message);
+ dns_message_create(notify->zone->mctx, NULL, NULL,
+ DNS_MESSAGE_INTENTPARSE, &message);
result = dns_request_getresult(request);
if (result != ISC_R_SUCCESS) {
goto next_primary;
}
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
+ &msg);
result = dns_request_getresponse(request, msg,
DNS_MESSAGEPARSE_PRESERVEORDER |
dns_zone_log(zone, ISC_LOG_DEBUG(1), "checkds: DS query to %s: done",
addrbuf);
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTPARSE, &message);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE,
+ &message);
INSIST(message != NULL);
CHECK(dns_request_getresult(request));
REQUIRE(DNS_ZONE_VALID(zone));
REQUIRE(messagep != NULL && *messagep == NULL);
- dns_message_create(zone->mctx, DNS_MESSAGE_INTENTRENDER, &message);
+ dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
+ &message);
message->opcode = dns_opcode_query;
message->rdclass = zone->rdclass;
ns_clientmgr_attach(mgr, &client->manager);
dns_message_create(client->manager->mctx,
+ client->manager->namepool,
+ client->manager->rdspool,
DNS_MESSAGE_INTENTPARSE, &client->message);
client->sendbuf = isc_mem_get(client->manager->send_mctx,
ns_server_detach(&manager->sctx);
+ dns_message_destroypools(&manager->rdspool, &manager->namepool);
+
isc_mem_detach(&manager->send_mctx);
isc_mem_putanddetach(&manager->mctx, manager, sizeof(*manager));
isc_refcount_init(&manager->references, 1);
ns_server_attach(sctx, &manager->sctx);
+ dns_message_createpools(mctx, &manager->namepool, &manager->rdspool);
+
/*
* We create specialised per-worker memory context specifically
* dedicated and tuned for allocating send buffers as it is a very
isc_mem_t *mctx;
isc_mem_t *send_mctx;
+ isc_mempool_t *namepool;
+ isc_mempool_t *rdspool;
+
ns_server_t *sctx;
isc_refcount_t references;
uint32_t tid;
* message.
*/
- dns_message_create(xfr->mctx, DNS_MESSAGE_INTENTRENDER,
- &tcpmsg);
+ dns_message_create(xfr->mctx, NULL, NULL,
+ DNS_MESSAGE_INTENTRENDER, &tcpmsg);
msg = tcpmsg;
msg->id = xfr->id;
dns_compress_t cctx;
isc_result_t result;
- dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &msg);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER, &msg);
assert_non_null(msg);
msg->id = 50;
/*
* Process response message 1.
*/
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &msg);
assert_non_null(msg);
result = dns_message_settsigkey(msg, key);
/*
* Process response message 2.
*/
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &msg);
assert_non_null(msg);
msg->tcp_continuation = 1;
/*
* Process response message 3.
*/
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &msg);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &msg);
assert_non_null(msg);
msg->tcp_continuation = 1;
/*
* Create a new DNS message holding a query.
*/
- dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &message);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
+ &message);
/*
* Set query ID to a random value.
char rcodebuf[20];
isc_buffer_t b;
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &message);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &message);
result = dns_message_parse(message, buf, 0);
assert_int_equal(result, ISC_R_SUCCESS);
isc_buffer_init(&nbuf, ndata, nsize);
isc_buffer_add(&nbuf, nsize);
- dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &nmsg);
+ dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTPARSE, &nmsg);
result = dns_message_parse(nmsg, &nbuf, 0);
assert_int_equal(result, ISC_R_SUCCESS);