Refactored dns_message_t for using attach/detach semantics

This commit will be used as a base for the next code updates in
order to have a better control of dns_message_t objects' lifetime.

(cherry picked from commit 12d6d13100)
This commit is contained in:
Diego Fronza 2020-09-21 16:16:15 -03:00 committed by Mark Andrews
parent d1bcb2fdbe
commit da84f8d1fd
25 changed files with 140 additions and 113 deletions

View file

@ -1676,7 +1676,7 @@ destroy_lookup(dig_lookup_t *lookup) {
isc_mem_free(mctx, ptr);
}
if (lookup->sendmsg != NULL) {
dns_message_destroy(&lookup->sendmsg);
dns_message_detach(&lookup->sendmsg);
}
if (lookup->querysig != NULL) {
debug("freeing buffer %p", lookup->querysig);
@ -3807,7 +3807,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
hex_dump(&b);
}
query->waiting_connect = false;
dns_message_destroy(&msg);
dns_message_detach(&msg);
isc_event_free(&event);
clear_query(query);
cancel_lookup(l);
@ -3829,7 +3829,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
dighost_warning("Warning: Opcode mismatch: expected %s, got %s",
expect, got);
dns_message_destroy(&msg);
dns_message_detach(&msg);
if (l->tcp_mode) {
isc_event_free(&event);
clear_query(query);
@ -3881,7 +3881,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
}
}
if (!match) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
if (l->tcp_mode) {
isc_event_free(&event);
clear_query(query);
@ -3907,7 +3907,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
if (l->trace && l->trace_root) {
n->rdtype = l->qrdtype;
}
dns_message_destroy(&msg);
dns_message_detach(&msg);
isc_event_free(&event);
clear_query(query);
cancel_lookup(l);
@ -3926,7 +3926,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
if (l->trace && l->trace_root) {
n->rdtype = l->qrdtype;
}
dns_message_destroy(&msg);
dns_message_detach(&msg);
isc_event_free(&event);
clear_query(query);
cancel_lookup(l);
@ -3950,7 +3950,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
if (l->trace && l->trace_root) {
n->rdtype = l->qrdtype;
}
dns_message_destroy(&msg);
dns_message_detach(&msg);
isc_event_free(&event);
clear_query(query);
cancel_lookup(l);
@ -3991,7 +3991,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
query->servname);
clear_query(query);
check_next_lookup(l);
dns_message_destroy(&msg);
dns_message_detach(&msg);
isc_event_free(&event);
UNLOCK_LOOKUP;
return;
@ -4124,7 +4124,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
}
if (l->doing_xfr) {
if (query != l->xfr_q) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
isc_event_free(&event);
query->waiting_connect = false;
UNLOCK_LOOKUP;
@ -4134,7 +4134,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
docancel = check_for_more_data(query, msg, sevent);
}
if (docancel) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
clear_query(query);
cancel_lookup(l);
check_next_lookup(l);
@ -4150,14 +4150,14 @@ recv_done(isc_task_t *task, isc_event_t *event) {
}
if (!query->lookup->ns_search_only ||
query->lookup->trace_root || docancel) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
cancel_lookup(l);
}
clear_query(query);
check_next_lookup(l);
}
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
isc_event_free(&event);
UNLOCK_LOOKUP;

View file

@ -963,7 +963,7 @@ flush_lookup_list(void) {
isc_mem_free(mctx, sp);
}
if (l->sendmsg != NULL) {
dns_message_destroy(&l->sendmsg);
dns_message_detach(&l->sendmsg);
}
lp = l;
l = ISC_LIST_NEXT(l, link);

View file

@ -729,7 +729,7 @@ doshutdown(void) {
}
if (updatemsg != NULL) {
dns_message_destroy(&updatemsg);
dns_message_detach(&updatemsg);
}
if (is_dst_up) {
@ -2596,7 +2596,7 @@ recvsoa(isc_task_t *task, isc_event_t *event) {
if (shuttingdown) {
dns_request_destroy(&request);
dns_message_destroy(&soaquery);
dns_message_detach(&soaquery);
isc_mem_put(gmctx, reqinfo, sizeof(nsu_requestinfo_t));
isc_event_free(&event);
maybeshutdown();
@ -2627,7 +2627,7 @@ recvsoa(isc_task_t *task, isc_event_t *event) {
result = dns_request_getresponse(request, rcvmsg,
DNS_MESSAGEPARSE_PRESERVEORDER);
if (result == DNS_R_TSIGERRORSET && servers != NULL) {
dns_message_destroy(&rcvmsg);
dns_message_detach(&rcvmsg);
ddebug("Destroying request [%p]", request);
dns_request_destroy(&request);
reqinfo = isc_mem_get(gmctx, sizeof(nsu_requestinfo_t));
@ -2666,9 +2666,9 @@ recvsoa(isc_task_t *task, isc_event_t *event) {
char namebuf[DNS_NAME_FORMATSIZE];
dns_name_format(userzone, namebuf, sizeof(namebuf));
error("specified zone '%s' does not exist (NXDOMAIN)", namebuf);
dns_message_destroy(&rcvmsg);
dns_message_detach(&rcvmsg);
dns_request_destroy(&request);
dns_message_destroy(&soaquery);
dns_message_detach(&soaquery);
ddebug("Out of recvsoa");
done_update();
seenerror = true;
@ -2802,11 +2802,11 @@ lookforsoa:
setzoneclass(dns_rdataclass_none);
#endif /* ifdef GSSAPI */
dns_message_destroy(&soaquery);
dns_message_detach(&soaquery);
dns_request_destroy(&request);
out:
dns_message_destroy(&rcvmsg);
dns_message_detach(&rcvmsg);
ddebug("Out of recvsoa");
return;
@ -3019,7 +3019,7 @@ start_gssrequest(dns_name_t *master) {
failure:
if (rmsg != NULL) {
dns_message_destroy(&rmsg);
dns_message_detach(&rmsg);
}
if (err_message != NULL) {
isc_mem_free(gmctx, err_message);
@ -3094,7 +3094,7 @@ recvgss(isc_task_t *task, isc_event_t *event) {
if (shuttingdown) {
dns_request_destroy(&request);
dns_message_destroy(&tsigquery);
dns_message_detach(&tsigquery);
isc_mem_put(gmctx, reqinfo, sizeof(nsu_gssinfo_t));
isc_event_free(&event);
maybeshutdown();
@ -3105,7 +3105,7 @@ recvgss(isc_task_t *task, isc_event_t *event) {
ddebug("Destroying request [%p]", request);
dns_request_destroy(&request);
if (!next_master("recvgss", addr, eresult)) {
dns_message_destroy(&tsigquery);
dns_message_detach(&tsigquery);
failed_gssrequest();
} else {
dns_message_renderreset(tsigquery);
@ -3165,7 +3165,7 @@ recvgss(isc_task_t *task, isc_event_t *event) {
&err_message);
switch (result) {
case DNS_R_CONTINUE:
dns_message_destroy(&rcvmsg);
dns_message_detach(&rcvmsg);
dns_request_destroy(&request);
send_gssrequest(kserver, tsigquery, &request, context);
ddebug("Out of recvgss");
@ -3212,9 +3212,9 @@ recvgss(isc_task_t *task, isc_event_t *event) {
done:
dns_request_destroy(&request);
dns_message_destroy(&tsigquery);
dns_message_detach(&tsigquery);
dns_message_destroy(&rcvmsg);
dns_message_detach(&rcvmsg);
ddebug("Out of recvgss");
}
#endif /* ifdef GSSAPI */
@ -3233,7 +3233,7 @@ start_update(void) {
LOCK(&answer_lock);
if (answer != NULL) {
dns_message_destroy(&answer);
dns_message_detach(&answer);
}
UNLOCK(&answer_lock);
@ -3278,7 +3278,7 @@ start_update(void) {
dns_message_puttempname(soaquery, &name);
dns_rdataset_disassociate(rdataset);
dns_message_puttemprdataset(soaquery, &rdataset);
dns_message_destroy(&soaquery);
dns_message_detach(&soaquery);
done_update();
return;
}
@ -3316,7 +3316,7 @@ cleanup(void) {
LOCK(&answer_lock);
if (answer != NULL) {
dns_message_destroy(&answer);
dns_message_detach(&answer);
}
UNLOCK(&answer_lock);

View file

@ -114,8 +114,8 @@ recvresponse(isc_task_t *task, isc_event_t *event) {
(char *)isc_buffer_base(&outbuf));
fflush(stdout);
dns_message_destroy(&query);
dns_message_destroy(&response);
dns_message_detach(&query);
dns_message_detach(&response);
dns_request_destroy(&reqev->request);
isc_event_free(&event);

View file

@ -116,8 +116,8 @@ recvquery(isc_task_t *task, isc_event_t *event) {
result = dst_key_tofile(tsigkey->key, type, "");
CHECK("dst_key_tofile", result);
dns_message_destroy(&query);
dns_message_destroy(&response);
dns_message_detach(&query);
dns_message_detach(&response);
dns_request_destroy(&reqev->request);
isc_event_free(&event);
isc_app_shutdown();

View file

@ -95,8 +95,8 @@ recvquery(isc_task_t *task, isc_event_t *event) {
result = dns_tkey_processdeleteresponse(query, response, ring);
CHECK("dns_tkey_processdhresponse", result);
dns_message_destroy(&query);
dns_message_destroy(&response);
dns_message_detach(&query);
dns_message_detach(&response);
dns_request_destroy(&reqev->request);
isc_event_free(&event);
isc_app_shutdown();

View file

@ -341,7 +341,7 @@ process_message(isc_buffer_t *source) {
dns_compress_invalidate(&cctx);
message->from_to_wire = DNS_MESSAGE_INTENTPARSE;
dns_message_destroy(&message);
dns_message_detach(&message);
printf("Message rendered.\n");
if (printmemstats) {
@ -358,5 +358,5 @@ process_message(isc_buffer_t *source) {
result = printmessage(message);
CHECKRESULT(result, "printmessage() failed");
}
dns_message_destroy(&message);
dns_message_detach(&message);
}

View file

@ -416,7 +416,7 @@ cleanup:
dns_dt_close(&handle);
}
if (message != NULL) {
dns_message_destroy(&message);
dns_message_detach(&message);
}
if (b != NULL) {
isc_buffer_free(&b);

View file

@ -533,10 +533,10 @@ cleanup:
dns_master_styledestroy(&style, mctx);
}
if (query != NULL) {
dns_message_destroy(&query);
dns_message_detach(&query);
}
if (response != NULL) {
dns_message_destroy(&response);
dns_message_detach(&response);
}
dns_request_destroy(&reqev->request);
isc_event_free(&event);

View file

@ -1902,7 +1902,7 @@ static void
update_sendevent(updatectx_t *uctx, isc_result_t result) {
isc_task_t *task;
dns_message_destroy(&uctx->updatemsg);
dns_message_detach(&uctx->updatemsg);
if (uctx->tsigkey != NULL) {
dns_tsigkey_detach(&uctx->tsigkey);
}
@ -1959,7 +1959,7 @@ update_done(isc_task_t *task, isc_event_t *event) {
out:
if (answer != NULL) {
dns_message_destroy(&answer);
dns_message_detach(&answer);
}
isc_event_free(&event);
@ -2291,7 +2291,7 @@ receive_soa(isc_task_t *task, isc_event_t *event) {
dns_request_t *newrequest = NULL;
/* Retry SOA request without TSIG */
dns_message_destroy(&rcvmsg);
dns_message_detach(&rcvmsg);
dns_message_renderreset(uctx->soaquery);
reqoptions = 0;
if (uctx->want_tcp) {
@ -2406,14 +2406,14 @@ out:
}
if (!droplabel || result != ISC_R_SUCCESS) {
dns_message_destroy(&uctx->soaquery);
dns_message_detach(&uctx->soaquery);
LOCK(&uctx->lock);
dns_request_destroy(&uctx->soareq);
UNLOCK(&uctx->lock);
}
if (rcvmsg != NULL) {
dns_message_destroy(&rcvmsg);
dns_message_detach(&rcvmsg);
}
if (result != ISC_R_SUCCESS) {
@ -2475,7 +2475,7 @@ fail:
if (name != NULL) {
dns_message_puttempname(soaquery, &name);
}
dns_message_destroy(&soaquery);
dns_message_detach(&soaquery);
return (result);
}
@ -2965,7 +2965,7 @@ fail:
UNLOCK(&client->lock);
}
if (uctx->updatemsg != NULL) {
dns_message_destroy(&uctx->updatemsg);
dns_message_detach(&uctx->updatemsg);
}
while ((sa = ISC_LIST_HEAD(uctx->servers)) != NULL) {
ISC_LIST_UNLINK(uctx->servers, sa, link);

View file

@ -1147,7 +1147,7 @@ dns_dt_parse(isc_mem_t *mctx, isc_region_t *src, dns_dtdata_t **destp) {
result = dns_message_parse(d->msg, &b, 0);
if (result != ISC_R_SUCCESS) {
if (result != DNS_R_RECOVERABLE) {
dns_message_destroy(&d->msg);
dns_message_detach(&d->msg);
}
result = ISC_R_SUCCESS;
}
@ -1370,7 +1370,7 @@ dns_dtdata_free(dns_dtdata_t **dp) {
*dp = NULL;
if (d->msg != NULL) {
dns_message_destroy(&d->msg);
dns_message_detach(&d->msg);
}
if (d->frame != NULL) {
dnstap__dnstap__free_unpacked(d->frame, NULL);

View file

@ -21,6 +21,7 @@
#include <isc/lang.h>
#include <isc/magic.h>
#include <isc/refcount.h>
#include <dns/compress.h>
#include <dns/masterdump.h>
@ -202,7 +203,8 @@ struct dns_sortlist_arg {
struct dns_message {
/* public from here down */
unsigned int magic;
unsigned int magic;
isc_refcount_t refcount;
dns_messageid_t id;
unsigned int flags;
@ -324,8 +326,8 @@ dns_message_reset(dns_message_t *msg, unsigned int 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
* way to call dns_message_destroy() followed by dns_message_allocate(),
* since it avoid many memory allocations.
* way to call dns_message_detach() (assuming last reference is hold),
* followed by dns_message_create(), since it avoid many memory allocations.
*
* If any data loanouts (buffers, names, rdatas, etc) were requested,
* the caller must no longer use them after this call.
@ -340,16 +342,23 @@ dns_message_reset(dns_message_t *msg, unsigned int intent);
*/
void
dns_message_destroy(dns_message_t **msgp);
dns_message_attach(dns_message_t *source, dns_message_t **target);
/*%<
* Destroy all state in the message.
* Attach to message 'source'.
*
* Requires:
*\li 'source' to be a valid message.
*\li 'target' to be non NULL and '*target' to be NULL.
*/
void
dns_message_detach(dns_message_t **messagep);
/*%<
* Detach *messagep from its message.
* list.
*
*\li 'msgp' be valid.
*
* Ensures:
*\li '*msgp' == NULL
* Requires:
*\li '*messagep' to be a valid message.
*/
isc_result_t

View file

@ -539,7 +539,7 @@ msgresetsigs(dns_message_t *msg, bool replying) {
/*
* Free all but one (or everything) for this message. This is used by
* both dns_message_reset() and dns_message_destroy().
* both dns_message_reset() and dns__message_destroy().
*/
static void
msgreset(dns_message_t *msg, bool everything) {
@ -774,6 +774,8 @@ dns_message_create(isc_mem_t *mctx, unsigned int intent, dns_message_t **msgp) {
m->cctx = NULL;
isc_refcount_init(&m->refcount, 1);
*msgp = m;
return (ISC_R_SUCCESS);
}
@ -788,23 +790,38 @@ dns_message_reset(dns_message_t *msg, unsigned int intent) {
msg->from_to_wire = intent;
}
void
dns_message_destroy(dns_message_t **msgp) {
dns_message_t *msg;
REQUIRE(msgp != NULL);
REQUIRE(DNS_MESSAGE_VALID(*msgp));
msg = *msgp;
*msgp = NULL;
static void
dns__message_destroy(dns_message_t *msg) {
REQUIRE(msg != NULL);
REQUIRE(DNS_MESSAGE_VALID(msg));
msgreset(msg, true);
isc_mempool_destroy(&msg->namepool);
isc_mempool_destroy(&msg->rdspool);
isc_refcount_destroy(&msg->refcount);
msg->magic = 0;
isc_mem_putanddetach(&msg->mctx, msg, sizeof(dns_message_t));
}
void
dns_message_attach(dns_message_t *source, dns_message_t **target) {
REQUIRE(DNS_MESSAGE_VALID(source));
isc_refcount_increment(&source->refcount);
*target = source;
}
void
dns_message_detach(dns_message_t **messagep) {
REQUIRE(messagep != NULL && DNS_MESSAGE_VALID(*messagep));
dns_message_t *msg = *messagep;
*messagep = NULL;
if (isc_refcount_decrement(&msg->refcount) == 1) {
dns__message_destroy(msg);
}
}
static isc_result_t
findname(dns_name_t **foundname, const dns_name_t *target,
dns_namelist_t *section) {

View file

@ -4571,8 +4571,8 @@ fctx_destroy(fetchctx_t *fctx) {
isc_counter_detach(&fctx->qc);
fcount_decr(fctx);
isc_timer_detach(&fctx->timer);
dns_message_destroy(&fctx->rmessage);
dns_message_destroy(&fctx->qmessage);
dns_message_detach(&fctx->rmessage);
dns_message_detach(&fctx->qmessage);
if (dns_name_countlabels(&fctx->domain) > 0) {
dns_name_free(&fctx->domain, fctx->mctx);
}
@ -5229,10 +5229,10 @@ cleanup_mctx:
isc_timer_detach(&fctx->timer);
cleanup_rmessage:
dns_message_destroy(&fctx->rmessage);
dns_message_detach(&fctx->rmessage);
cleanup_qmessage:
dns_message_destroy(&fctx->qmessage);
dns_message_detach(&fctx->qmessage);
cleanup_fcount:
fcount_decr(fctx);

View file

@ -262,7 +262,7 @@ render(isc_buffer_t *buf, unsigned flags, dns_tsigkey_t *key,
}
dns_compress_invalidate(&cctx);
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
/*
@ -353,7 +353,7 @@ tsig_tcp_test(void **state) {
tsigctx = msg->tsigctx;
msg->tsigctx = NULL;
isc_buffer_free(&buf);
dns_message_destroy(&msg);
dns_message_detach(&msg);
result = dst_context_create(key->key, dt_mctx, DNS_LOGCATEGORY_DNSSEC,
false, 0, &outctx);
@ -410,7 +410,7 @@ tsig_tcp_test(void **state) {
tsigctx = msg->tsigctx;
msg->tsigctx = NULL;
isc_buffer_free(&buf);
dns_message_destroy(&msg);
dns_message_detach(&msg);
/*
* Create response message 3.
@ -461,7 +461,7 @@ tsig_tcp_test(void **state) {
assert_int_equal(result, ISC_R_SUCCESS);
isc_buffer_free(&buf);
dns_message_destroy(&msg);
dns_message_detach(&msg);
if (outctx != NULL) {
dst_context_destroy(&outctx);

View file

@ -524,12 +524,13 @@ dns_master_stylecreate
dns_master_styledestroy
dns_master_styleflags
dns_message_addname
dns_message_attach
dns_message_buildopt
dns_message_checksig
dns_message_clonebuffer
dns_message_create
dns_message_currentname
dns_message_destroy
dns_message_detach
dns_message_find
dns_message_findname
dns_message_findtype

View file

@ -1195,7 +1195,7 @@ failure:
dns_message_puttemprdataset(msg, &qrdataset);
}
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
if (soatuple != NULL) {
dns_difftuple_free(&soatuple);
@ -1312,7 +1312,7 @@ xfrin_recv_done(isc_task_t *task, isc_event_t *ev) {
xfrin_log(xfr, ISC_LOG_DEBUG(3), "got %s, retrying with AXFR",
isc_result_totext(result));
try_axfr:
dns_message_destroy(&msg);
dns_message_detach(&msg);
xfrin_reset(xfr);
xfr->reqtype = dns_rdatatype_soa;
xfr->state = XFRST_SOAQUERY;
@ -1423,7 +1423,7 @@ xfrin_recv_done(isc_task_t *task, isc_event_t *ev) {
xfr->tsigctx = msg->tsigctx;
msg->tsigctx = NULL;
dns_message_destroy(&msg);
dns_message_detach(&msg);
switch (xfr->state) {
case XFRST_GOTSOA:
@ -1469,7 +1469,7 @@ xfrin_recv_done(isc_task_t *task, isc_event_t *ev) {
failure:
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
if (result != ISC_R_SUCCESS) {
xfrin_fail(xfr, result, "failed while receiving responses");

View file

@ -12141,7 +12141,7 @@ cleanup_key:
dns_tsigkey_detach(&key);
}
cleanup_message:
dns_message_destroy(&message);
dns_message_detach(&message);
cleanup:
UNLOCK_ZONE(notify->zone);
isc_event_free(&event);
@ -12720,7 +12720,7 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_write);
dns_db_detach(&stub->db);
dns_message_destroy(&msg);
dns_message_detach(&msg);
isc_event_free(&event);
dns_request_destroy(&zone->request);
@ -12745,7 +12745,7 @@ next_master:
dns_db_detach(&stub->db);
}
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
isc_event_free(&event);
dns_request_destroy(&zone->request);
@ -12799,7 +12799,7 @@ next_master:
same_master:
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
isc_event_free(&event);
dns_request_destroy(&zone->request);
@ -13225,7 +13225,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
ns_query(zone, rdataset, NULL);
}
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
} else if (isc_serial_eq(soa.serial, oldserial)) {
isc_time_t expiretime;
@ -13264,13 +13264,13 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
goto next_master;
}
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
goto detach;
next_master:
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
isc_event_free(&event);
dns_request_destroy(&zone->request);
@ -13329,7 +13329,7 @@ requeue:
same_master:
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
isc_event_free(&event);
dns_request_destroy(&zone->request);
@ -13428,7 +13428,7 @@ cleanup:
dns_message_puttemprdataset(message, &qrdataset);
}
if (message != NULL) {
dns_message_destroy(&message);
dns_message_detach(&message);
}
return (result);
}
@ -13658,7 +13658,7 @@ cleanup:
DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_REFRESH);
}
if (message != NULL) {
dns_message_destroy(&message);
dns_message_detach(&message);
}
if (cancel) {
cancel_refresh(zone);
@ -13672,7 +13672,7 @@ skip_master:
if (key != NULL) {
dns_tsigkey_detach(&key);
}
dns_message_destroy(&message);
dns_message_detach(&message);
/*
* Skip to next failed / untried master.
*/
@ -13900,7 +13900,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
dns_result_totext(result));
goto cleanup;
}
dns_message_destroy(&message);
dns_message_detach(&message);
goto unlock;
cleanup:
@ -13917,7 +13917,7 @@ cleanup:
}
isc_mem_put(stub->mctx, stub, sizeof(*stub));
if (message != NULL) {
dns_message_destroy(&message);
dns_message_detach(&message);
}
unlock:
if (key != NULL) {
@ -14412,7 +14412,7 @@ cleanup:
if (temprdataset != NULL) {
dns_message_puttemprdataset(message, &temprdataset);
}
dns_message_destroy(&message);
dns_message_detach(&message);
return (result);
}
@ -15253,7 +15253,7 @@ notify_done(isc_task_t *task, isc_event_t *event) {
notify_destroy(notify, false);
}
if (message != NULL) {
dns_message_destroy(&message);
dns_message_detach(&message);
}
}
@ -17286,7 +17286,7 @@ forward_callback(isc_task_t *task, isc_event_t *event) {
next_master:
if (msg != NULL) {
dns_message_destroy(&msg);
dns_message_detach(&msg);
}
isc_event_free(&event);
forward->which++;

View file

@ -1584,7 +1584,7 @@ ns__client_put_cb(void *client0) {
dns_message_puttemprdataset(client->message, &client->opt);
}
dns_message_destroy(&client->message);
dns_message_detach(&client->message);
/*
* Detaching the task must be done after unlinking from
@ -2340,7 +2340,7 @@ cleanup:
}
if (client->message != NULL) {
dns_message_destroy(&client->message);
dns_message_detach(&client->message);
}
if (client->task != NULL) {

View file

@ -79,7 +79,7 @@ check_response(isc_buffer_t *buf) {
assert_int_equal(message->rcode, dns_rcode_noerror);
dns_message_destroy(&message);
dns_message_detach(&message);
}
/* test ns_notify_start() */
@ -126,7 +126,7 @@ notify_start(void **state) {
* handler.
*/
if (client->message != NULL) {
dns_message_destroy(&client->message);
dns_message_detach(&client->message);
}
client->message = nmsg;
nmsg = NULL;

View file

@ -664,7 +664,7 @@ attach_query_msg_to_client(ns_client_t *client, const char *qnamestr,
* Destroy the created message as it was rendered into "querybuf" and
* the latter is all we are going to need from now on.
*/
dns_message_destroy(&message);
dns_message_detach(&message);
/*
* Parse the rendered query, storing results in client->message.
@ -677,7 +677,7 @@ put_name:
put_rdataset:
dns_message_puttemprdataset(message, &qrdataset);
destroy_message:
dns_message_destroy(&message);
dns_message_detach(&message);
return (result);
}
@ -813,7 +813,7 @@ ns_test_qctx_create(const ns_test_qctx_create_params_t *params,
*/
result = create_qctx_for_client(client, qctxp);
if (result != ISC_R_SUCCESS) {
goto destroy_query;
goto detach_query;
}
/*
@ -824,8 +824,8 @@ ns_test_qctx_create(const ns_test_qctx_create_params_t *params,
return (ISC_R_SUCCESS);
destroy_query:
dns_message_destroy(&client->message);
detach_query:
dns_message_detach(&client->message);
detach_view:
dns_view_detach(&client->view);
detach_client:

View file

@ -3531,7 +3531,7 @@ forward_done(isc_task_t *task, isc_event_t *event) {
INSIST(client->nupdates > 0);
client->nupdates--;
ns_client_sendraw(client, uev->answer);
dns_message_destroy(&uev->answer);
dns_message_detach(&uev->answer);
isc_event_free(&event);
isc_nmhandle_unref(client->handle);
}

View file

@ -1575,7 +1575,7 @@ failure:
}
if (tcpmsg != NULL) {
dns_message_destroy(&tcpmsg);
dns_message_detach(&tcpmsg);
}
if (cleanup_cctx) {

View file

@ -1227,8 +1227,8 @@ main(int argc, char *argv[]) {
/* Cleanup */
for (i = 0; i < MAX_PROBES; i++) {
dns_message_destroy(&probes[i].qmessage);
dns_message_destroy(&probes[i].rmessage);
dns_message_detach(&probes[i].qmessage);
dns_message_detach(&probes[i].rmessage);
}
isc_task_detach(&probe_task);
dns_client_destroy(&client);

View file

@ -112,7 +112,7 @@ cleanup:
if (qrdataset != NULL) {
dns_message_puttemprdataset(message, &qrdataset);
}
dns_message_destroy(&message);
dns_message_detach(&message);
return (result);
}
@ -245,8 +245,8 @@ main(int argc, char *argv[]) {
isc_buffer_free(&outputbuf);
/* Cleanup */
dns_message_destroy(&qmessage);
dns_message_destroy(&rmessage);
dns_message_detach(&qmessage);
dns_message_detach(&rmessage);
isc_mem_destroy(&mctx);
dns_client_destroy(&client);
dns_lib_shutdown();