From e8d90bcd1d21359b2e733bd6abaa89886aff1fa0 Mon Sep 17 00:00:00 2001 From: unwox Date: Fri, 27 Sep 2024 15:42:00 +0600 Subject: close opened databases on exit --- main.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index 00629f3..ed9d203 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,17 @@ func main() { wrks := []*Worker{} // track routes for mux to avoid registering the same route twice routes := make(map[string]bool) + // track open dbs to close them on exit + dbs := []*sql.DB{} + dbmu := sync.Mutex{} + defer func() { + for _, db := range dbs { + if db == nil { + continue + } + db.Close() + } + }() // define luna.router module routeModule := make(map[string]any) @@ -163,12 +174,16 @@ func main() { // FIXME: handle. return 0 } - r, err := sql.Open("sqlite3", file) + db, err := sql.Open("sqlite3", file) if err != nil { // FIXME: handle. return 0 } h := cgo.NewHandle(r) + dbmu.Lock() + dbs = append(dbs, db) + dbmu.Unlock() + h := cgo.NewHandle(db) l.PushNumber(int(h)) return 1 } @@ -354,6 +369,14 @@ func main() { // FIXME: handle. return 0 } + dbmu.Lock() + for k, _db := range dbs { + if db == _db { + dbs[k] = nil + break + } + } + dbmu.Unlock() handle.Delete() return 0 } -- cgit v1.2.3