Issue #219: Fix waiting for save on shutdown

Improve the logic

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
This commit is contained in:
Hector Sanjuan 2017-11-10 16:55:39 +01:00
parent 01fc55550a
commit d1473fd3be
2 changed files with 10 additions and 8 deletions

View File

@ -118,10 +118,11 @@ func (cfg *Manager) watchSave(save <-chan struct{}) {
defer ticker.Stop()
thingsToSave := false
exit := false
for {
select {
case <-save:
thingsToSave = true
case <-ticker.C:
if thingsToSave {
err := cfg.SaveJSON("")
@ -130,13 +131,13 @@ func (cfg *Manager) watchSave(save <-chan struct{}) {
}
thingsToSave = false
}
if exit {
// Exit if we have to
select {
case <-cfg.ctx.Done():
return
default:
}
case <-save:
thingsToSave = true
case <-cfg.ctx.Done():
exit = true
}
}
}

View File

@ -264,6 +264,9 @@ func run(c *cli.Context) error {
func daemon(c *cli.Context) error {
// Load all the configurations
cfg, clusterCfg, apiCfg, ipfshttpCfg, consensusCfg, monCfg, diskInfCfg, numpinInfCfg := makeConfigs()
// always wait for configuration to be saved
defer cfg.Shutdown()
err := cfg.LoadJSONFromFile(configPath)
checkErr("loading configuration", err)
@ -323,8 +326,6 @@ func daemon(c *cli.Context) error {
//case <-cluster.Ready():
}
}
// wait for configuration to be saved
cfg.Shutdown()
return nil
}