"query logging",
NS_SERVER_LOGQUERIES, lex);
} else if (command_compare(command, NAMED_COMMAND_RECONFIG)) {
- result = named_server_reconfigcommand(named_g_server);
+ result = named_server_reconfigcommand(named_g_server, *text);
} else if (command_compare(command, NAMED_COMMAND_RECURSING)) {
result = named_server_dumprecursing(named_g_server);
} else if (command_compare(command, NAMED_COMMAND_REFRESH)) {
static isc_result_t
reload(named_server_t *server) {
isc_result_t result;
+ int reloadstatus = atomic_exchange(&server->reload_status,
+ NAMED_RELOAD_IN_PROGRESS);
- atomic_store(&server->reload_status, NAMED_RELOAD_IN_PROGRESS);
+ if (reloadstatus == NAMED_RELOAD_IN_PROGRESS) {
+ isc_log_write(NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER,
+ ISC_LOG_WARNING,
+ "reload request ignored: already running");
+ result = ISC_R_ALREADYRUNNING;
+ goto cleanup;
+ }
named_os_notify_systemd("RELOADING=1\n"
"MONOTONIC_USEC=%" PRIu64 "\n"
}
if (zone == NULL) {
result = reload(server);
- if (result == ISC_R_SUCCESS) {
+ switch (result) {
+ case ISC_R_SUCCESS:
msg = "server reload successful";
+ break;
+ case ISC_R_ALREADYRUNNING:
+ msg = "reload request ignored as the server is "
+ "currently being reloaded or reconfigured";
+ break;
+ default:
+ break;
}
} else {
type = dns_zone_gettype(zone);
* Act on a "reconfig" command from the command channel.
*/
isc_result_t
-named_server_reconfigcommand(named_server_t *server) {
+named_server_reconfigcommand(named_server_t *server, isc_buffer_t *text) {
isc_result_t result;
- atomic_store(&server->reload_status, NAMED_RELOAD_IN_PROGRESS);
+ int reloadstatus = atomic_exchange(&server->reload_status,
+ NAMED_RELOAD_IN_PROGRESS);
+
+ if (reloadstatus == NAMED_RELOAD_IN_PROGRESS) {
+ isc_log_write(NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER,
+ ISC_LOG_WARNING,
+ "reconfig request ignored: already running");
+ result = ISC_R_ALREADYRUNNING;
+ isc_buffer_printf(text,
+ "reconfig request ignored as the server is "
+ "currently being reloaded or reconfigured");
+ goto cleanup;
+ }
named_os_notify_systemd("RELOADING=1\n"
"MONOTONIC_USEC=%" PRIu64 "\n"