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);
return;
}
+ assert(!(server->state & ServerRunning));
evsched_join(&server->sched);
worker_pool_join(server->workers);
server_free_handler(&server->handlers[proto].handler);
}
}
+
+ server->state &= ~ServerAnswering;
}
static int reload_conf(conf_t *new_conf)
* \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;
/*!