From 685824a6f46e27ad54b5dc81c6b71583fd589829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Auger?= Date: Thu, 27 Aug 2020 21:07:26 +0200 Subject: [PATCH] Add fs.Close method to save the database when the application exits --- main.go | 1 + store/fs/fs.go | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index f5b5413..f90c550 100644 --- a/main.go +++ b/main.go @@ -235,6 +235,7 @@ func main() { log.Fatalf("error initializing store: %v", err) } store = s + defer s.Close() } else { logger.Fatal("app.storage must be one of redis|memory|fs") diff --git a/store/fs/fs.go b/store/fs/fs.go index 00fb073..6296ce9 100644 --- a/store/fs/fs.go +++ b/store/fs/fs.go @@ -95,7 +95,7 @@ func (m *File) load() error { } // save the data to the file system. -func (m *File) save() { +func (m *File) save() error { m.mu.Lock() defer m.mu.Unlock() if m.dirty { @@ -108,14 +108,19 @@ func (m *File) save() { }) if err == nil { m.dirty = false - go func() { - err := ioutil.WriteFile(m.cfg.Path, data, os.ModePerm) - if err != nil { - m.log.Printf("error writing file %q: %v", m.cfg.Path, err) - } - }() + err = ioutil.WriteFile(m.cfg.Path, data, os.ModePerm) + if err != nil { + m.log.Printf("error writing file %q: %v", m.cfg.Path, err) + } } + return err } + return nil +} + +// Close the database and save it on the file system. +func (m *File) Close() error { + return m.save() } // AddRoom adds a room to the store.