]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Refactored dns_message_t for using attach/detach semantics
authorDiego Fronza <diego@isc.org>
Mon, 21 Sep 2020 19:16:15 +0000 (16:16 -0300)
committerOndřej Surý <ondrej@sury.org>
Tue, 29 Sep 2020 06:22:08 +0000 (08:22 +0200)
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.

26 files changed:
bin/dig/dighost.c
bin/dig/nslookup.c
bin/nsupdate/nsupdate.c
bin/tests/system/pipelined/pipequeries.c
bin/tests/system/tkey/keycreate.c
bin/tests/system/tkey/keydelete.c
bin/tests/wire_test.c
bin/tools/dnstap-read.c
bin/tools/mdig.c
fuzz/dns_message_parse.c
lib/dns/client.c
lib/dns/dnstap.c
lib/dns/include/dns/message.h
lib/dns/message.c
lib/dns/resolver.c
lib/dns/tests/tsig_test.c
lib/dns/win32/libdns.def.in
lib/dns/xfrin.c
lib/dns/zone.c
lib/ns/client.c
lib/ns/tests/notify_test.c
lib/ns/tests/nstest.c
lib/ns/update.c
lib/ns/xfrout.c
lib/samples/nsprobe.c
lib/samples/sample-request.c

index 88616db1b4491c35be34c29df104240a0d019136..b1ed60c58af862bbadc6c12e1f7bc4e08afbe2d1 100644 (file)
@@ -1681,7 +1681,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);
@@ -3817,7 +3817,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);
@@ -3839,7 +3839,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);
@@ -3891,7 +3891,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);
@@ -3917,7 +3917,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);
@@ -3936,7 +3936,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);
@@ -3960,7 +3960,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);
@@ -4001,7 +4001,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;
@@ -4134,7 +4134,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;
@@ -4144,7 +4144,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);
@@ -4160,14 +4160,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;
index d0e270e04807196c4414a22313e53204cdb8b8ec..1e99a3dae2abf65f450e77d8d9f0bd01f7873c12 100644 (file)
@@ -935,7 +935,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);
index e9d524dd5fbe8b9b08110e5aa6b61e30f7289cf3..b3fed5d500603d6c3839015b00e6f1a02ec0be18 100644 (file)
@@ -720,7 +720,7 @@ doshutdown(void) {
        }
 
        if (updatemsg != NULL) {
-               dns_message_destroy(&updatemsg);
+               dns_message_detach(&updatemsg);
        }
 
        if (is_dst_up) {
@@ -2580,7 +2580,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();
@@ -2611,7 +2611,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));
@@ -2650,9 +2650,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;
@@ -2786,11 +2786,11 @@ lookforsoa:
        setzoneclass(dns_rdataclass_none);
 #endif /* HAVE_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;
 
@@ -3003,7 +3003,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);
@@ -3078,7 +3078,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();
@@ -3089,7 +3089,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);
@@ -3149,7 +3149,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");
@@ -3196,9 +3196,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 /* HAVE_GSSAPI */
@@ -3217,7 +3217,7 @@ start_update(void) {
 
        LOCK(&answer_lock);
        if (answer != NULL) {
-               dns_message_destroy(&answer);
+               dns_message_detach(&answer);
        }
        UNLOCK(&answer_lock);
 
@@ -3262,7 +3262,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;
                }
@@ -3300,7 +3300,7 @@ cleanup(void) {
 
        LOCK(&answer_lock);
        if (answer != NULL) {
-               dns_message_destroy(&answer);
+               dns_message_detach(&answer);
        }
        UNLOCK(&answer_lock);
 
index 668594e026e3fa9aeac46c41ed085a2d1bda3275..7bafdc66b044b14e54288b53ba8e232e7dc6a5d6 100644 (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);
 
index 0527fb11feadf8c11a3c7148592260d60b21a7e4..8fa5a7d2f1101b74754e32fe85353ce11f2caf1b 100644 (file)
@@ -118,8 +118,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();
index dff499f0b5899d982e84482dc82de45a31b40929..15fb84b2f0e8e13d7018c9c208a4efa927b99d3b 100644 (file)
@@ -96,8 +96,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();
index b972e98cca646123b5551d466436fb41dd502865..f420d8992cbe9580c800b281faaea570db180245 100644 (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);
 }
index f952e9bf2537c31d76fc7f06c2e0dfc91da156c9..5b15fa815300a101fdd16a5eb7563e5dee44a14d 100644 (file)
@@ -417,7 +417,7 @@ cleanup:
                dns_dt_close(&handle);
        }
        if (message != NULL) {
-               dns_message_destroy(&message);
+               dns_message_detach(&message);
        }
        if (b != NULL) {
                isc_buffer_free(&b);
index 3183758e3724d93ea6341d141fc51dd3531c295d..0f7ddcdffb14afd06e4bfc0da95525ab21f0d5c9 100644 (file)
@@ -534,10 +534,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);
index dc90e8d4e1fb49619a885ba842f7180b28975128..0f80465b43e3f4cbb937fac3d116f689d233931a 100644 (file)
@@ -60,7 +60,7 @@ parse_message(isc_buffer_t *input, dns_message_t **messagep) {
        if (result == ISC_R_SUCCESS && messagep != NULL) {
                *messagep = message;
        } else {
-               dns_message_destroy(&message);
+               dns_message_detach(&message);
        }
 
        return (result);
@@ -128,7 +128,7 @@ render_message(dns_message_t **messagep) {
 
        message->from_to_wire = DNS_MESSAGE_INTENTPARSE;
 
-       dns_message_destroy(messagep);
+       dns_message_detach(messagep);
 
        result = parse_message(&buffer, messagep);
 
@@ -171,7 +171,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 
 cleanup:
        if (message != NULL) {
-               dns_message_destroy(&message);
+               dns_message_detach(&message);
        }
 
        return (0);
index f7a5cdb68366f0f7cc4ea44eb0446818d78cae21..2f188551883b5ca6adc1128ca3c0634a646139dd 100644 (file)
@@ -1893,7 +1893,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);
        }
@@ -1950,7 +1950,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);
 
@@ -2282,7 +2282,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) {
@@ -2397,14 +2397,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) {
@@ -2466,7 +2466,7 @@ fail:
        if (name != NULL) {
                dns_message_puttempname(soaquery, &name);
        }
-       dns_message_destroy(&soaquery);
+       dns_message_detach(&soaquery);
 
        return (result);
 }
@@ -2956,7 +2956,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);
index cd58b9b2a8cb9652179603ab9e955e4d60a871b6..064f1b25865a617763ba2b05c37062fc88209e6b 100644 (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);
index b89cc6b6d5c268204ba2611a6d48083937218e47..1f13bcf2fd3617411c84e0c4318f8196dfdd4cbd 100644 (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>
@@ -203,6 +204,7 @@ struct dns_sortlist_arg {
 struct dns_message {
        /* public from here down */
        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
index 98fa9177e8fc47a48abd6e39f9d8f72cfa5cc7a5..b8fd4dee937b576aa2b793e2527f50cc13744ae3 100644 (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) {
index b2737562bca01b33162f3ca9de2601e1d234fedc..5f5cafce7bc72ae8a5027ebf916bda769c6e8c7f 100644 (file)
@@ -4561,8 +4561,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);
        }
@@ -5217,10 +5217,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);
index eec284758e674e295dda8315ac8d1a20c5c61484..85821b1258266ef5f627ae7857d3ad8281188b49 100644 (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);
index e3f6aed4ea814b136188e8b6b385077d01f12aef..c8f308dec9b0bcf3316bc9992c5f62fe2d80405a 100644 (file)
@@ -522,12 +522,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
index 9d96c24fcfc19e04b2fe5523f76e919dd9a3143d..d24816af28d844971058152cdab78d8d20e4da81 100644 (file)
@@ -1187,7 +1187,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);
@@ -1304,7 +1304,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;
@@ -1464,7 +1464,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:
@@ -1510,7 +1510,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");
index fc522a90744d5b0ad502c65ba04d260c199e46c8..267735ee5df401383f3cd55ac91479e89ed002f1 100644 (file)
@@ -12182,7 +12182,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);
@@ -12761,7 +12761,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);
 
@@ -12786,7 +12786,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);
@@ -12840,7 +12840,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);
@@ -13266,7 +13266,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;
@@ -13305,13 +13305,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);
@@ -13370,7 +13370,7 @@ requeue:
 
 same_master:
        if (msg != NULL) {
-               dns_message_destroy(&msg);
+               dns_message_detach(&msg);
        }
        isc_event_free(&event);
        dns_request_destroy(&zone->request);
@@ -13469,7 +13469,7 @@ cleanup:
                dns_message_puttemprdataset(message, &qrdataset);
        }
        if (message != NULL) {
-               dns_message_destroy(&message);
+               dns_message_detach(&message);
        }
        return (result);
 }
@@ -13699,7 +13699,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);
@@ -13713,7 +13713,7 @@ skip_master:
        if (key != NULL) {
                dns_tsigkey_detach(&key);
        }
-       dns_message_destroy(&message);
+       dns_message_detach(&message);
        /*
         * Skip to next failed / untried master.
         */
@@ -13941,7 +13941,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:
@@ -13958,7 +13958,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) {
@@ -14453,7 +14453,7 @@ cleanup:
        if (temprdataset != NULL) {
                dns_message_puttemprdataset(message, &temprdataset);
        }
-       dns_message_destroy(&message);
+       dns_message_detach(&message);
        return (result);
 }
 
@@ -15294,7 +15294,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);
        }
 }
 
@@ -17327,7 +17327,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++;
index 480928105bdfaeb521bf5a730addd63b9ea6b633..021d19eec181d489a189c88e38a707ae7b9e1da3 100644 (file)
@@ -1581,7 +1581,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
@@ -2342,7 +2342,7 @@ cleanup:
        }
 
        if (client->message != NULL) {
-               dns_message_destroy(&client->message);
+               dns_message_detach(&client->message);
        }
 
        if (client->task != NULL) {
index 88f9eccbcc75f53bf536ef9beac0f6490d57b636..ce97dd9fdce5db037136c65aa26d4e137cc1bb8d 100644 (file)
@@ -78,7 +78,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;
index 9b7d7e04e98296612237c81b2859ab275b87e801..17989147b37aa89a54b53545bd7f2c919ce5d71a 100644 (file)
@@ -677,7 +677,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.
@@ -690,7 +690,7 @@ put_name:
 put_rdataset:
        dns_message_puttemprdataset(message, &qrdataset);
 destroy_message:
-       dns_message_destroy(&message);
+       dns_message_detach(&message);
 
        return (result);
 }
@@ -829,7 +829,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;
        }
 
        /*
@@ -842,8 +842,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:
index ce424ca87f83f3b02f95ec532c3fb3f33dca77e4..54d67c114a6c476f583facda8390d3fe808e4321 100644 (file)
@@ -3596,7 +3596,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_detach(&client->updatehandle);
 }
index 4bbb884ed281216f6b6b2666828a3357dacab66a..3118e709422168d01721a7bf378a738d3d24fb80 100644 (file)
@@ -1602,7 +1602,7 @@ failure:
        }
 
        if (tcpmsg != NULL) {
-               dns_message_destroy(&tcpmsg);
+               dns_message_detach(&tcpmsg);
        }
 
        if (cleanup_cctx) {
index 0ecb6b09378b5a54011f9fb01c4cb7448e593d10..141d481bc0b1bfaf2011962a7a3c0fe0dd3e5ec4 100644 (file)
@@ -1228,8 +1228,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);
index 07a63ae06a9f3b3f6e69c8b9951e323060ada890..af5ec1e2d96f98fb35555457b53d715116e9e904 100644 (file)
@@ -113,7 +113,7 @@ cleanup:
        if (qrdataset != NULL) {
                dns_message_puttemprdataset(message, &qrdataset);
        }
-       dns_message_destroy(&message);
+       dns_message_detach(&message);
        return (result);
 }
 
@@ -246,8 +246,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();