conf: use 2 swappable conf slots, so old config can stay valid
... in case reloading of it after SIGHUP fails, the old config can
continue working.
(apart from the logging-related issue mentioned in 27d96df999
)
This commit is contained in:
parent
5dd514af93
commit
2e02dce0c3
15
src/main.c
15
src/main.c
@ -48,11 +48,17 @@
|
|||||||
* Global Structures
|
* Global Structures
|
||||||
*/
|
*/
|
||||||
struct config_s *config;
|
struct config_s *config;
|
||||||
static struct config_s config_main;
|
static struct config_s configs[2];
|
||||||
static struct config_s config_defaults;
|
|
||||||
static const char* config_file;
|
static const char* config_file;
|
||||||
unsigned int received_sighup = FALSE; /* boolean */
|
unsigned int received_sighup = FALSE; /* boolean */
|
||||||
|
|
||||||
|
static struct config_s*
|
||||||
|
get_next_config(void)
|
||||||
|
{
|
||||||
|
if (config == &configs[0]) return &configs[1];
|
||||||
|
return &configs[0];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle a signal
|
* Handle a signal
|
||||||
*/
|
*/
|
||||||
@ -247,16 +253,17 @@ change_user (const char *program)
|
|||||||
int reload_config (int reload_logging)
|
int reload_config (int reload_logging)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
struct config_s *c_next = get_next_config();
|
||||||
|
|
||||||
if (reload_logging) shutdown_logging ();
|
if (reload_logging) shutdown_logging ();
|
||||||
|
|
||||||
ret = reload_config_file (config_file, &config_main);
|
ret = reload_config_file (config_file, c_next);
|
||||||
|
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
config = &config_main;
|
config = c_next;
|
||||||
|
|
||||||
if (reload_logging) ret = setup_logging ();
|
if (reload_logging) ret = setup_logging ();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user