]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
named_server_servestale could leave the server in exclusive mode if a error occurs.
authorMark Andrews <marka@isc.org>
Fri, 27 Jul 2018 05:36:53 +0000 (15:36 +1000)
committerEvan Hunt <each@isc.org>
Fri, 27 Jul 2018 05:54:15 +0000 (22:54 -0700)
CHANGES
bin/named/server.c

diff --git a/CHANGES b/CHANGES
index cb762879971129a9825ff52f83386dc4bfc33cfb..069e373ae2300d9e8fb0ae804906063a00b03d8f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+5000.  [bug]           named_server_servestale() could leave the server in
+                       exclusive mode if an error occured. [GL #441]
+
 4999.  [cleanup]       Remove custom printf implementaion in lib/isc/print.c.
                        [GL #261]
 
index c53c0c3e2963bcf68a6f99098c004601340eca42..077ce463b1949cbff94e9eeefd5efdd9940bfb3c 100644 (file)
@@ -14931,6 +14931,7 @@ named_server_servestale(named_server_t *server, isc_lex_t *lex,
        dns_stale_answer_t staleanswersok = dns_stale_answer_conf;
        isc_boolean_t wantstatus = ISC_FALSE;
        isc_result_t result = ISC_R_SUCCESS;
+       isc_boolean_t exclusive = ISC_FALSE;
 
        /* Skip the command name. */
        ptr = next_token(lex, text);
@@ -14982,6 +14983,7 @@ named_server_servestale(named_server_t *server, isc_lex_t *lex,
 
        result = isc_task_beginexclusive(server->task);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);
+       exclusive = ISC_TRUE;
 
        for (view = ISC_LIST_HEAD(server->viewlist);
             view != NULL;
@@ -15037,12 +15039,14 @@ named_server_servestale(named_server_t *server, isc_lex_t *lex,
                }
                found = ISC_TRUE;
        }
-       isc_task_endexclusive(named_g_server->task);
 
        if (!found)
                result = ISC_R_NOTFOUND;
 
 cleanup:
+       if (exclusive)
+               isc_task_endexclusive(named_g_server->task);
+
        if (isc_buffer_usedlength(*text) > 0)
                (void) putnull(text);