func keystoreDispatch(ks *store.KeyStore, keystoreFile string) { for { t := time.After(10 * time.Minute) select { case cmd, ok := <-dispatch: if !ok { return } log.Println("received command for", cmd.op) res := process(ks, cmd) cmd.cb <- res case <-t: log.Printf("dumping keystore") t = time.After(10 * time.Minute) out, err := ks.Dump() if err != nil { log.Printf("WARNING: failed to dump keystore: %v", err) break } err = ioutil.WriteFile(keystoreFile, out, 0644) if err != nil { log.Printf("WARNING: failed to write keystore: %v", err) } } } }