]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
server: discriminate between server running and answering (add the ServerAnswering...
authorDavid Vašek <david.vasek@nic.cz>
Mon, 14 Jul 2025 12:49:03 +0000 (14:49 +0200)
committerDavid Vašek <david.vasek@nic.cz>
Thu, 17 Jul 2025 16:37:53 +0000 (18:37 +0200)
src/knot/server/server.c
src/knot/server/server.h

index f96331de1fb98f5d2965648f071090e6c9b74d62..b88ba0171763578f07cdb5092421a5228df0b7e8 100644 (file)
@@ -1027,7 +1027,7 @@ int server_start(server_t *server, bool async)
        evsched_start(&server->sched);
 
        /* Start I/O handlers. */
-       server->state |= ServerRunning;
+       server->state |= ServerRunning | ServerAnswering;
        for (int proto = IO_UDP; proto <= IO_XDP; ++proto) {
                if (server->handlers[proto].size > 0) {
                        int ret = dt_start(server->handlers[proto].handler.unit);
@@ -1046,6 +1046,7 @@ void server_wait(server_t *server)
                return;
        }
 
+       assert(!(server->state & ServerRunning));
        evsched_join(&server->sched);
        worker_pool_join(server->workers);
 
@@ -1054,6 +1055,8 @@ void server_wait(server_t *server)
                        server_free_handler(&server->handlers[proto].handler);
                }
        }
+
+       server->state &= ~ServerAnswering;
 }
 
 static int reload_conf(conf_t *new_conf)
index a6236b787f2a7c501b5dfa8e7f7b0eed2e6a06de..bbe5d923c5e9e3a79ab80a67e619934de5c69eec 100644 (file)
@@ -36,8 +36,9 @@ typedef struct {
  * \brief Server state flags.
  */
 typedef enum {
-       ServerIdle    = 0 << 0, /*!< Server is idle. */
-       ServerRunning = 1 << 0, /*!< Server is running. */
+       ServerIdle      = 0 << 0, /*!< Server is idle. */
+       ServerRunning   = 1 << 0, /*!< Server is running. */
+       ServerAnswering = 1 << 1, /*!< Server is answering queries. */
 } server_state_t;
 
 /*!