]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
remove isc_timer from xfrin
authorEvan Hunt <each@isc.org>
Fri, 9 Oct 2020 23:34:22 +0000 (16:34 -0700)
committerOndřej Surý <ondrej@sury.org>
Mon, 9 Nov 2020 12:45:43 +0000 (13:45 +0100)
the network manager can now handle timeouts, so it isn't
necessary for xfrin to use isc_timer for the purpose any
longer.

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

index bc7b7498cec04b57d1aef4409c12a024c91a5d33..d0fbef1625809649209aa73c13a11544cf6592c4 100644 (file)
@@ -48,9 +48,9 @@ isc_result_t
 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_timermgr_t *timermgr, isc_nm_t *netmgr, isc_task_t *task,
-                dns_xfrindone_t done, dns_xfrin_ctx_t **xfrp);
+                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);
 /*%<
  * Attempt to start an incoming zone transfer of 'zone'
  * from 'masteraddr', creating a dns_xfrin_ctx_t object to
index 9548ad8b0fc2ddea5e7e297eec1d8d56d9ecc862..e0620633c9b623d9d1d2088aa81653468d183029 100644 (file)
@@ -19,7 +19,6 @@
 #include <isc/random.h>
 #include <isc/string.h> /* Required for HP/UX (and others?) */
 #include <isc/task.h>
-#include <isc/timer.h>
 #include <isc/util.h>
 
 #include <dns/callbacks.h>
@@ -36,7 +35,6 @@
 #include <dns/result.h>
 #include <dns/soa.h>
 #include <dns/tcpmsg.h>
-#include <dns/timer.h>
 #include <dns/tsig.h>
 #include <dns/view.h>
 #include <dns/xfrin.h>
@@ -99,7 +97,6 @@ struct dns_xfrin_ctx {
        isc_refcount_t refs;
 
        isc_task_t *task;
-       isc_timer_t *timer;
        isc_nm_t *netmgr;
 
        isc_refcount_t connects; /*%< Connect in progress */
@@ -189,12 +186,12 @@ struct dns_xfrin_ctx {
  * Forward declarations.
  */
 
-static isc_result_t
+static void
 xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task,
-            isc_timermgr_t *timermgr, 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);
+            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);
 
 static isc_result_t
 axfr_init(dns_xfrin_ctx_t *xfr);
@@ -236,8 +233,6 @@ xfrin_send_done(isc_nmhandle_t *handle, isc_result_t result, void *cbarg);
 static void
 xfrin_recv_done(isc_nmhandle_t *handle, isc_result_t result,
                isc_region_t *region, void *cbarg);
-static void
-xfrin_timeout(isc_task_t *task, isc_event_t *event);
 
 static void
 maybe_free(dns_xfrin_ctx_t *xfr);
@@ -658,9 +653,9 @@ isc_result_t
 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_timermgr_t *timermgr, isc_nm_t *netmgr, isc_task_t *task,
-                dns_xfrindone_t done, dns_xfrin_ctx_t **xfrp) {
+                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_name_t *zonename = dns_zone_getorigin(zone);
        dns_xfrin_ctx_t *xfr = NULL;
        isc_result_t result;
@@ -675,9 +670,9 @@ dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype,
                REQUIRE(db != NULL);
        }
 
-       CHECK(xfrin_create(mctx, zone, db, task, timermgr, netmgr, zonename,
-                          dns_zone_getclass(zone), xfrtype, masteraddr,
-                          sourceaddr, dscp, tsigkey, &xfr));
+       xfrin_create(mctx, zone, db, task, netmgr, zonename,
+                    dns_zone_getclass(zone), xfrtype, masteraddr, sourceaddr,
+                    dscp, tsigkey, &xfr);
 
        if (db != NULL) {
                xfr->zone_had_db = true;
@@ -709,10 +704,10 @@ dns_xfrin_create(dns_zone_t *zone, dns_rdatatype_t xfrtype,
                dns_xfrin_detach(xfrp);
        }
 
-failure:
        if (db != NULL) {
                dns_db_detach(&db);
        }
+
        if (result != ISC_R_SUCCESS) {
                char zonetext[DNS_NAME_MAXTEXT + 32];
                dns_zone_name(zone, zonetext, sizeof(zonetext));
@@ -823,14 +818,13 @@ xfrin_fail(dns_xfrin_ctx_t *xfr, isc_result_t result, const char *msg) {
        maybe_free(xfr);
 }
 
-static isc_result_t
+static void
 xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task,
-            isc_timermgr_t *timermgr, 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) {
+            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) {
        dns_xfrin_ctx_t *xfr = NULL;
-       isc_result_t result;
 
        xfr = isc_mem_get(mctx, sizeof(*xfr));
        *xfr = (dns_xfrin_ctx_t){ .netmgr = netmgr,
@@ -868,11 +862,6 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task,
 
        dns_name_dup(zonename, mctx, &xfr->name);
 
-       CHECK(isc_timer_create(timermgr, isc_timertype_inactive, NULL, NULL,
-                              task, xfrin_timeout, xfr, &xfr->timer));
-       CHECK(dns_timer_setidle(xfr->timer, dns_zone_getmaxxfrin(xfr->zone),
-                               dns_zone_getidlein(xfr->zone), false));
-
        INSIST(isc_sockaddr_pf(masteraddr) == isc_sockaddr_pf(sourceaddr));
        isc_sockaddr_setport(&xfr->sourceaddr, 0);
 
@@ -885,26 +874,6 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task,
        xfr->magic = XFRIN_MAGIC;
 
        *xfrp = xfr;
-       return (ISC_R_SUCCESS);
-
-failure:
-       if (xfr->timer != NULL) {
-               isc_timer_detach(&xfr->timer);
-       }
-       if (dns_name_dynamic(&xfr->name)) {
-               dns_name_free(&xfr->name, xfr->mctx);
-       }
-       if (xfr->tsigkey != NULL) {
-               dns_tsigkey_detach(&xfr->tsigkey);
-       }
-       if (xfr->db != NULL) {
-               dns_db_detach(&xfr->db);
-       }
-       isc_task_detach(&xfr->task);
-       dns_zone_idetach(&xfr->zone);
-       isc_mem_putanddetach(&xfr->mctx, xfr, sizeof(*xfr));
-
-       return (result);
 }
 
 static isc_result_t
@@ -1215,8 +1184,6 @@ xfrin_recv_done(isc_nmhandle_t *handle, isc_result_t result,
 
        xfrin_log(xfr, ISC_LOG_DEBUG(7), "received %u bytes", region->length);
 
-       CHECK(isc_timer_touch(xfr->timer));
-
        dns_message_create(xfr->mctx, DNS_MESSAGE_INTENTPARSE, &msg);
 
        CHECK(dns_message_settsigkey(msg, xfr->tsigkey));
@@ -1491,21 +1458,6 @@ failure:
        dns_xfrin_detach(&xfr);
 }
 
-static void
-xfrin_timeout(isc_task_t *task, isc_event_t *event) {
-       dns_xfrin_ctx_t *xfr = (dns_xfrin_ctx_t *)event->ev_arg;
-
-       REQUIRE(VALID_XFRIN(xfr));
-
-       UNUSED(task);
-
-       isc_event_free(&event);
-       /*
-        * This will log "giving up: timeout".
-        */
-       xfrin_fail(xfr, ISC_R_TIMEDOUT, "giving up");
-}
-
 static void
 maybe_free(dns_xfrin_ctx_t *xfr) {
        uint64_t msecs;
@@ -1557,10 +1509,6 @@ maybe_free(dns_xfrin_ctx_t *xfr) {
                isc_nmhandle_detach(&xfr->sendhandle);
        }
 
-       if (xfr->timer != NULL) {
-               isc_timer_detach(&xfr->timer);
-       }
-
        if (xfr->task != NULL) {
                isc_task_detach(&xfr->task);
        }
index 2e3886bbc6c72510d8798549435f8f49787073d4..cd5b68b38c056c475d2b037e86708487ebad4404 100644 (file)
@@ -17503,9 +17503,8 @@ 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->timermgr,
-                              zone->zmgr->netmgr, zone->task, zone_xfrdone,
-                              &zone->xfr));
+                              zone->tsigkey, zone->mctx, zone->zmgr->netmgr,
+                              zone->task, zone_xfrdone, &zone->xfr));
        LOCK_ZONE(zone);
        if (xfrtype == dns_rdatatype_axfr) {
                if (isc_sockaddr_pf(&masteraddr) == PF_INET) {