diff --git a/database/base.go b/database/base.go index 9ab0998..536b024 100644 --- a/database/base.go +++ b/database/base.go @@ -15,20 +15,17 @@ import ( "github.com/jmoiron/sqlx" ) -// amdb is the reference to the Amsterdam database. +// amdb is the reference to the Amsterdam database. Returns a function to close it down. var amdb *sqlx.DB // SetupDb sets up the database and associated items. -func SetupDb() error { +func SetupDb() (func(), error) { db, err := sqlx.Open(config.GlobalConfig.Database.Driver, config.GlobalConfig.Database.Dsn) if err == nil { amdb = db // TODO: additional initialization } - return err -} - -// ClosedownDb closes down the database and associated items. -func ClosedownDb() { - amdb.Close() + return func() { + amdb.Close() + }, err } diff --git a/email/sender.go b/email/sender.go index b424bf2..aaafefc 100644 --- a/email/sender.go +++ b/email/sender.go @@ -186,7 +186,7 @@ var sendChan chan *amMessage var doneChan chan bool // SetupMailSender starts the mail-sending goroutine. -func SetupMailSender() { +func SetupMailSender() func() { // Initialize mail host and authentication. mailHost = fmt.Sprintf("%s:%d", config.GlobalConfig.Email.Host, config.GlobalConfig.Email.Port) switch config.GlobalConfig.Email.AuthType { @@ -211,10 +211,8 @@ func SetupMailSender() { sendChan = make(chan *amMessage, 16) doneChan = make(chan bool) go senderLoop(sendChan, doneChan) -} - -// EndMailServer shuts down the mail-sending goroutine. -func EndMailServer() { - close(sendChan) // will break the loop in senderLoop - <-doneChan // wait for routine to complete + return func() { + close(sendChan) // will break the loop in senderLoop + <-doneChan // wait for routine to complete + } } diff --git a/main.go b/main.go index 5c872da..c328e30 100644 --- a/main.go +++ b/main.go @@ -56,13 +56,13 @@ func setupEcho() *echo.Echo { func main() { // Configure the system. config.SetupConfig() - err := database.SetupDb() + closer, err := database.SetupDb() if err != nil { panic(fmt.Sprintf("Database open failure: %v", err)) } - defer database.ClosedownDb() - email.SetupMailSender() - defer email.EndMailServer() + defer closer() + closer = email.SetupMailSender() + defer closer() ui.SetupTemplates() ui.SetupSessionManager() ui.SetupLeftMenus()