From 9d35e02e0ec22c71832db7f110996cc7ac2b7b1e Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Sun, 22 Mar 2026 19:02:09 +0100 Subject: [PATCH] fix db WAL memory leak #1056 --- cronjob/WALCheckpointJob.go | 3 +-- database/db.go | 14 +++++++++++++- service/client.go | 3 +-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cronjob/WALCheckpointJob.go b/cronjob/WALCheckpointJob.go index f6baa2e..f08b68c 100644 --- a/cronjob/WALCheckpointJob.go +++ b/cronjob/WALCheckpointJob.go @@ -13,8 +13,7 @@ func NewWALCheckpointJob() *WALCheckpointJob { func (s *WALCheckpointJob) Run() { db := database.GetDB() - _, err := db.Raw("PRAGMA wal_checkpoint(FULL)").Rows() - if err != nil { + if err := db.Exec("PRAGMA wal_checkpoint(FULL)").Error; err != nil { logger.Error("Error checkpointing WAL: ", err.Error()) } } diff --git a/database/db.go b/database/db.go index 3810bbd..b302775 100644 --- a/database/db.go +++ b/database/db.go @@ -5,6 +5,7 @@ import ( "os" "path" "strings" + "time" "github.com/alireza0/s-ui/config" "github.com/alireza0/s-ui/database/model" @@ -56,11 +57,22 @@ func OpenDB(dbPath string) error { } dsn := dbPath + sep + "_busy_timeout=10000&_journal_mode=WAL" db, err = gorm.Open(sqlite.Open(dsn), c) + if err != nil { + return err + } + + sqlDB, err := db.DB() + if err != nil { + return err + } + sqlDB.SetMaxOpenConns(25) + sqlDB.SetMaxIdleConns(5) + sqlDB.SetConnMaxLifetime(time.Hour) if config.IsDebug() { db = db.Debug() } - return err + return nil } func InitDB(dbPath string) error { diff --git a/service/client.go b/service/client.go index 8fc9b90..70be8dc 100644 --- a/service/client.go +++ b/service/client.go @@ -378,8 +378,7 @@ func (s *ClientService) DepleteClients() ([]uint, error) { defer func() { if err == nil { tx.Commit() - _, err1 := db.Raw("PRAGMA wal_checkpoint(FULL)").Rows() - if err1 != nil { + if err1 := db.Exec("PRAGMA wal_checkpoint(FULL)").Error; err1 != nil { logger.Error("Error checkpointing WAL: ", err1.Error()) } } else {