mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Add dns__message_putassociatedrdataset() to deduplicate code
There was a lot of internal code looking like this:
INSIST(dns_rdataset_isassociated(rdataset));
dns_rdataset_disassociated(rdataset)
isc_mempool_put(msg->rdspool, rdataset);
Deduplicate the code into local dns__message_puttemprdataset() routine,
and drop the INSIST() which is checked in dns_rdataset_disassociate().
This commit is contained in:
parent
5fca0fb519
commit
fd732a7fb5
1 changed files with 27 additions and 19 deletions
|
|
@ -178,6 +178,15 @@ msgblock_allocate(isc_mem_t *, unsigned int, unsigned int);
|
|||
#define msgblock_get(block, type) \
|
||||
((type *)msgblock_internalget(block, sizeof(type)))
|
||||
|
||||
/*
|
||||
* This function differs from public dns_message_puttemprdataset() that it
|
||||
* requires the *rdatasetp to be associated, and it will disassociate and
|
||||
* put it back to the memory pool.
|
||||
*/
|
||||
static void
|
||||
dns__message_putassociatedrdataset(dns_message_t *msg,
|
||||
dns_rdataset_t **rdatasetp);
|
||||
|
||||
static void *
|
||||
msgblock_internalget(dns_msgblock_t *, unsigned int);
|
||||
|
||||
|
|
@ -453,9 +462,7 @@ msgresetnames(dns_message_t *msg, unsigned int first_section) {
|
|||
next_rds = ISC_LIST_NEXT(rds, link);
|
||||
ISC_LIST_UNLINK(name->list, rds, link);
|
||||
|
||||
INSIST(dns_rdataset_isassociated(rds));
|
||||
dns_rdataset_disassociate(rds);
|
||||
isc_mempool_put(msg->rdspool, rds);
|
||||
dns__message_putassociatedrdataset(msg, &rds);
|
||||
rds = next_rds;
|
||||
}
|
||||
dns_message_puttempname(msg, &name);
|
||||
|
|
@ -471,9 +478,7 @@ msgresetopt(dns_message_t *msg) {
|
|||
dns_message_renderrelease(msg, msg->opt_reserved);
|
||||
msg->opt_reserved = 0;
|
||||
}
|
||||
INSIST(dns_rdataset_isassociated(msg->opt));
|
||||
dns_rdataset_disassociate(msg->opt);
|
||||
isc_mempool_put(msg->rdspool, msg->opt);
|
||||
dns__message_putassociatedrdataset(msg, &msg->opt);
|
||||
msg->opt = NULL;
|
||||
msg->cc_ok = 0;
|
||||
msg->cc_bad = 0;
|
||||
|
|
@ -493,24 +498,20 @@ msgresetsigs(dns_message_t *msg, bool replying) {
|
|||
INSIST(msg->querytsig == NULL);
|
||||
msg->querytsig = msg->tsig;
|
||||
} else {
|
||||
dns_rdataset_disassociate(msg->tsig);
|
||||
isc_mempool_put(msg->rdspool, msg->tsig);
|
||||
dns__message_putassociatedrdataset(msg, &msg->tsig);
|
||||
if (msg->querytsig != NULL) {
|
||||
dns_rdataset_disassociate(msg->querytsig);
|
||||
isc_mempool_put(msg->rdspool, msg->querytsig);
|
||||
dns__message_putassociatedrdataset(
|
||||
msg, &msg->querytsig);
|
||||
}
|
||||
}
|
||||
dns_message_puttempname(msg, &msg->tsigname);
|
||||
msg->tsig = NULL;
|
||||
} else if (msg->querytsig != NULL && !replying) {
|
||||
dns_rdataset_disassociate(msg->querytsig);
|
||||
isc_mempool_put(msg->rdspool, msg->querytsig);
|
||||
dns__message_putassociatedrdataset(msg, &msg->querytsig);
|
||||
msg->querytsig = NULL;
|
||||
}
|
||||
if (msg->sig0 != NULL) {
|
||||
INSIST(dns_rdataset_isassociated(msg->sig0));
|
||||
dns_rdataset_disassociate(msg->sig0);
|
||||
isc_mempool_put(msg->rdspool, msg->sig0);
|
||||
dns__message_putassociatedrdataset(msg, &msg->sig0);
|
||||
msg->sig0 = NULL;
|
||||
}
|
||||
if (msg->sig0name != NULL) {
|
||||
|
|
@ -1081,8 +1082,7 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t dctx,
|
|||
|
||||
cleanup:
|
||||
if (rdataset != NULL) {
|
||||
INSIST(!dns_rdataset_isassociated(rdataset));
|
||||
isc_mempool_put(msg->rdspool, rdataset);
|
||||
dns_message_puttemprdataset(msg, &rdataset);
|
||||
}
|
||||
if (free_name) {
|
||||
dns_message_puttempname(msg, &name);
|
||||
|
|
@ -1580,7 +1580,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t dctx,
|
|||
dns_message_puttempname(msg, &name);
|
||||
}
|
||||
if (free_rdataset) {
|
||||
isc_mempool_put(msg->rdspool, rdataset);
|
||||
dns__message_putassociatedrdataset(msg,
|
||||
&rdataset);
|
||||
}
|
||||
free_name = free_rdataset = false;
|
||||
}
|
||||
|
|
@ -1612,7 +1613,7 @@ cleanup:
|
|||
dns_message_puttempname(msg, &name);
|
||||
}
|
||||
if (free_rdataset) {
|
||||
isc_mempool_put(msg->rdspool, rdataset);
|
||||
dns__message_putassociatedrdataset(msg, &rdataset);
|
||||
}
|
||||
|
||||
return (result);
|
||||
|
|
@ -2564,6 +2565,13 @@ dns_message_puttemprdata(dns_message_t *msg, dns_rdata_t **item) {
|
|||
*item = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
dns__message_putassociatedrdataset(dns_message_t *msg, dns_rdataset_t **item) {
|
||||
dns_rdataset_disassociate(*item);
|
||||
isc_mempool_put(msg->rdspool, *item);
|
||||
*item = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
dns_message_puttemprdataset(dns_message_t *msg, dns_rdataset_t **item) {
|
||||
REQUIRE(DNS_MESSAGE_VALID(msg));
|
||||
|
|
|
|||
Loading…
Reference in a new issue