]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
remove isc_task from xfrin
authorEvan Hunt <each@isc.org>
Fri, 9 Oct 2020 23:38:30 +0000 (16:38 -0700)
committerOndřej Surý <ondrej@sury.org>
Mon, 9 Nov 2020 12:45:43 +0000 (13:45 +0100)
since the network manager is now handling timeouts, xfrin doesn't
need an isc_task object.

it may be necessary to revert this later if we find that it's
important for zone_xfrdone() to be executed in the zone task context.
currently things seem to be working well without that, though.

lib/dns/include/dns/xfrin.h
lib/dns/xfrin.c
lib/dns/zone.c

index d0fbef1625809649209aa73c13a11544cf6592c4..253f90e6843d22edf19a8658df7d7676c40d8c68 100644 (file)
@@ -49,16 +49,14 @@ dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype,
                 const isc_sockaddr_t *masteraddr,
                 const isc_sockaddr_t *sourceaddr, isc_dscp_t dscp,
                 dns_tsigkey_t *tsigkey, isc_mem_t *mctx, isc_nm_t *netmgr,
-                isc_task_t *task, dns_xfrindone_t done,
-                dns_xfrin_ctx_t **xfrp);
+                dns_xfrindone_t done, dns_xfrin_ctx_t **xfrp);
 /*%<
  * Attempt to start an incoming zone transfer of 'zone'
  * from 'masteraddr', creating a dns_xfrin_ctx_t object to
  * manage it.  Attach '*xfrp' to the newly created object.
  *
- * Iff ISC_R_SUCCESS is returned, '*done' is guaranteed to be
- * called in the context of 'task', with 'zone' and a result
- * code as arguments when the transfer finishes.
+ * Iff ISC_R_SUCCESS is returned, '*done' is called with
+ * 'zone' and a result code as arguments when the transfer finishes.
  *
  * Requires:
  *\li  'xfrtype' is dns_rdatatype_axfr, dns_rdatatype_ixfr
index e0620633c9b623d9d1d2088aa81653468d183029..c225990a117996c5254ee36fbf1a2dc40d0bb6fe 100644 (file)
 #include <stdbool.h>
 
 #include <isc/mem.h>
+#include <isc/netmgr.h>
 #include <isc/print.h>
 #include <isc/random.h>
 #include <isc/string.h> /* Required for HP/UX (and others?) */
-#include <isc/task.h>
 #include <isc/util.h>
 
 #include <dns/callbacks.h>
@@ -96,7 +96,6 @@ struct dns_xfrin_ctx {
 
        isc_refcount_t refs;
 
-       isc_task_t *task;
        isc_nm_t *netmgr;
 
        isc_refcount_t connects; /*%< Connect in progress */
@@ -187,8 +186,8 @@ struct dns_xfrin_ctx {
  */
 
 static void
-xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task,
-            isc_nm_t *netmgr, dns_name_t *zonename, dns_rdataclass_t rdclass,
+xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_nm_t *netmgr,
+            dns_name_t *zonename, dns_rdataclass_t rdclass,
             dns_rdatatype_t reqtype, const isc_sockaddr_t *masteraddr,
             const isc_sockaddr_t *sourceaddr, isc_dscp_t dscp,
             dns_tsigkey_t *tsigkey, dns_xfrin_ctx_t **xfrp);
@@ -654,8 +653,7 @@ dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype,
                 const isc_sockaddr_t *masteraddr,
                 const isc_sockaddr_t *sourceaddr, isc_dscp_t dscp,
                 dns_tsigkey_t *tsigkey, isc_mem_t *mctx, isc_nm_t *netmgr,
-                isc_task_t *task, dns_xfrindone_t done,
-                dns_xfrin_ctx_t **xfrp) {
+                dns_xfrindone_t done, dns_xfrin_ctx_t **xfrp) {
        dns_name_t *zonename = dns_zone_getorigin(zone);
        dns_xfrin_ctx_t *xfr = NULL;
        isc_result_t result;
@@ -670,9 +668,8 @@ dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype,
                REQUIRE(db != NULL);
        }
 
-       xfrin_create(mctx, zone, db, task, netmgr, zonename,
-                    dns_zone_getclass(zone), xfrtype, masteraddr, sourceaddr,
-                    dscp, tsigkey, &xfr);
+       xfrin_create(mctx, zone, db, netmgr, zonename, dns_zone_getclass(zone),
+                    xfrtype, masteraddr, sourceaddr, dscp, tsigkey, &xfr);
 
        if (db != NULL) {
                xfr->zone_had_db = true;
@@ -753,6 +750,7 @@ xfrin_cancelio(dns_xfrin_ctx_t *xfr) {
        if (xfr->readhandle == NULL) {
                return;
        }
+
        isc_nm_cancelread(xfr->readhandle);
        isc_nmhandle_detach(&xfr->readhandle);
 }
@@ -819,8 +817,8 @@ xfrin_fail(dns_xfrin_ctx_t *xfr, isc_result_t result, const char *msg) {
 }
 
 static void
-xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task,
-            isc_nm_t *netmgr, dns_name_t *zonename, dns_rdataclass_t rdclass,
+xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_nm_t *netmgr,
+            dns_name_t *zonename, dns_rdataclass_t rdclass,
             dns_rdatatype_t reqtype, const isc_sockaddr_t *masteraddr,
             const isc_sockaddr_t *sourceaddr, isc_dscp_t dscp,
             dns_tsigkey_t *tsigkey, dns_xfrin_ctx_t **xfrp) {
@@ -839,7 +837,6 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task,
 
        isc_mem_attach(mctx, &xfr->mctx);
        dns_zone_iattach(zone, &xfr->zone);
-       isc_task_attach(task, &xfr->task);
        dns_name_init(&xfr->name, NULL);
 
        if (db != NULL) {
@@ -1509,10 +1506,6 @@ maybe_free(dns_xfrin_ctx_t *xfr) {
                isc_nmhandle_detach(&xfr->sendhandle);
        }
 
-       if (xfr->task != NULL) {
-               isc_task_detach(&xfr->task);
-       }
-
        if (xfr->tsigkey != NULL) {
                dns_tsigkey_detach(&xfr->tsigkey);
        }
index cd5b68b38c056c475d2b037e86708487ebad4404..13fc472d6728412439b5b90ea84bb03127ffc3fe 100644 (file)
@@ -17504,7 +17504,7 @@ got_transfer_quota(isc_task_t *task, isc_event_t *event) {
 
        CHECK(dns_xfrin_create(zone, xfrtype, &masteraddr, &sourceaddr, dscp,
                               zone->tsigkey, zone->mctx, zone->zmgr->netmgr,
-                              zone->task, zone_xfrdone, &zone->xfr));
+                              zone_xfrdone, &zone->xfr));
        LOCK_ZONE(zone);
        if (xfrtype == dns_rdatatype_axfr) {
                if (isc_sockaddr_pf(&masteraddr) == PF_INET) {