]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
simplify sending request events
authorEvan Hunt <each@isc.org>
Mon, 4 Oct 2021 00:24:35 +0000 (17:24 -0700)
committerEvan Hunt <each@isc.org>
Tue, 5 Oct 2021 17:18:48 +0000 (10:18 -0700)
The function send_if_done() was just a front-end for req_sendevents().

lib/dns/request.c

index 9214225e04c2e33c59822fb7777214fb2d261bcc..2085575661fcde921c586e285ad0513461b70450 100644 (file)
@@ -891,21 +891,6 @@ cleanup:
        return (result);
 }
 
-/*
- * If this request is no longer waiting for events,
- * send the completion event.  This will ultimately
- * cause the request to be destroyed.
- *
- * Requires:
- *     'request' is locked by the caller.
- */
-static void
-send_if_done(dns_request_t *request, isc_result_t result) {
-       if (request->event != NULL) {
-               req_sendevent(request, result);
-       }
-}
-
 void
 request_cancel(dns_request_t *request) {
        if (!DNS_REQUEST_CANCELED(request)) {
@@ -931,7 +916,7 @@ dns_request_cancel(dns_request_t *request) {
        req_log(ISC_LOG_DEBUG(3), "dns_request_cancel: request %p", request);
        LOCK(&request->requestmgr->locks[request->hash]);
        request_cancel(request);
-       send_if_done(request, ISC_R_CANCELED);
+       req_sendevent(request, ISC_R_CANCELED);
        UNLOCK(&request->requestmgr->locks[request->hash]);
 }
 
@@ -1027,14 +1012,14 @@ req_connected(isc_result_t eresult, isc_region_t *region, void *arg) {
        if (eresult == ISC_R_TIMEDOUT) {
                dns_dispatch_removeresponse(&request->dispentry);
                dns_dispatch_detach(&request->dispatch);
-               send_if_done(request, eresult);
+               req_sendevent(request, eresult);
        } else if (DNS_REQUEST_CANCELED(request)) {
-               send_if_done(request, ISC_R_CANCELED);
+               req_sendevent(request, ISC_R_CANCELED);
        } else if (eresult == ISC_R_SUCCESS) {
                req_send(request);
        } else {
                request_cancel(request);
-               send_if_done(request, ISC_R_CANCELED);
+               req_sendevent(request, ISC_R_CANCELED);
        }
        UNLOCK(&request->requestmgr->locks[request->hash]);
 
@@ -1057,13 +1042,13 @@ req_senddone(isc_result_t eresult, isc_region_t *region, void *arg) {
 
        if (DNS_REQUEST_CANCELED(request)) {
                if (eresult == ISC_R_TIMEDOUT) {
-                       send_if_done(request, eresult);
+                       req_sendevent(request, eresult);
                } else {
-                       send_if_done(request, ISC_R_CANCELED);
+                       req_sendevent(request, ISC_R_CANCELED);
                }
        } else if (eresult != ISC_R_SUCCESS) {
                request_cancel(request);
-               send_if_done(request, ISC_R_CANCELED);
+               req_sendevent(request, ISC_R_CANCELED);
        }
 
        UNLOCK(&request->requestmgr->locks[request->hash]);
@@ -1125,16 +1110,20 @@ done:
        /*
         * Send completion event.
         */
-       send_if_done(request, result);
+       req_sendevent(request, result);
        UNLOCK(&request->requestmgr->locks[request->hash]);
 }
 
 static void
 req_sendevent(dns_request_t *request, isc_result_t result) {
-       isc_task_t *task;
+       isc_task_t *task = NULL;
 
        REQUIRE(VALID_REQUEST(request));
 
+       if (request->event == NULL) {
+               return;
+       }
+
        req_log(ISC_LOG_DEBUG(3), "req_sendevent: request %p", request);
 
        /*