]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Only use tcpdns timer if it's initialized.
authorWitold Kręcicki <wpk@isc.org>
Thu, 5 Mar 2020 21:56:31 +0000 (22:56 +0100)
committerWitold Kręcicki <wpk@isc.org>
Thu, 5 Mar 2020 22:13:39 +0000 (23:13 +0100)
lib/isc/netmgr/tcpdns.c

index 379ff99bf3a81feb447090df62da1be2af275e48..11d338593dd4063a3de348984e3d5b75a91cd59d 100644 (file)
@@ -245,7 +245,9 @@ dnslisten_readcb(isc_nmhandle_t *handle, isc_region_t *region, void *arg) {
                 * We have a packet: stop timeout timers
                 */
                atomic_store(&dnssock->outer->processing, true);
-               uv_timer_stop(&dnssock->timer);
+               if (dnssock->timer_initialized) {
+                       uv_timer_stop(&dnssock->timer);
+               }
 
                if (atomic_load(&dnssock->sequential)) {
                        /*
@@ -387,8 +389,10 @@ resume_processing(void *arg) {
        if (atomic_load(&sock->ah) == 0) {
                /* Nothing is active; sockets can timeout now */
                atomic_store(&sock->outer->processing, false);
-               uv_timer_start(&sock->timer, dnstcp_readtimeout,
-                              sock->read_timeout, 0);
+               if (sock->timer_initialized) {
+                       uv_timer_start(&sock->timer, dnstcp_readtimeout,
+                                      sock->read_timeout, 0);
+               }
        }
 
        /*
@@ -401,7 +405,9 @@ resume_processing(void *arg) {
                result = processbuffer(sock, &handle);
                if (result == ISC_R_SUCCESS) {
                        atomic_store(&sock->outer->processing, true);
-                       uv_timer_stop(&sock->timer);
+                       if (sock->timer_initialized) {
+                               uv_timer_stop(&sock->timer);
+                       }
                        isc_nmhandle_unref(handle);
                } else if (sock->outer != NULL) {
                        isc_nm_resumeread(sock->outer);
@@ -429,7 +435,9 @@ resume_processing(void *arg) {
                        break;
                }
 
-               uv_timer_stop(&sock->timer);
+               if (sock->timer_initialized) {
+                       uv_timer_stop(&sock->timer);
+               }
                atomic_store(&sock->outer->processing, true);
                isc_nmhandle_unref(dnshandle);
        } while (atomic_load(&sock->ah) < TCPDNS_CLIENTS_PER_CONN);