mirror of
https://github.com/neilalexander/yggmail.git
synced 2026-04-27 12:26:29 +03:00
Handle SIGINT/SIGTERM, close database descriptior (fixes #5)
This commit is contained in:
@@ -8,8 +8,9 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
|
||||
"github.com/emersion/go-sasl"
|
||||
"github.com/emersion/go-smtp"
|
||||
@@ -64,6 +65,7 @@ func main() {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer storage.Close()
|
||||
log.Printf("Using database file %q\n", *database)
|
||||
|
||||
skStr, err := storage.ConfigGet("private_key")
|
||||
@@ -131,8 +133,6 @@ func main() {
|
||||
PublicKey: pk,
|
||||
PrivateKey: sk,
|
||||
}
|
||||
wg := &sync.WaitGroup{}
|
||||
wg.Add(2)
|
||||
|
||||
transport, err := transport.NewYggdrasilTransport(rawlog, sk, pk, peerAddrs, *multicast)
|
||||
if err != nil {
|
||||
@@ -155,8 +155,6 @@ func main() {
|
||||
log.Println("Listening for IMAP on:", *imapaddr)
|
||||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
|
||||
localBackend := &smtpserver.Backend{
|
||||
Log: log,
|
||||
Mode: smtpserver.BackendModeInternal,
|
||||
@@ -186,8 +184,6 @@ func main() {
|
||||
}()
|
||||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
|
||||
overlayBackend := &smtpserver.Backend{
|
||||
Log: log,
|
||||
Mode: smtpserver.BackendModeExternal,
|
||||
@@ -208,5 +204,8 @@ func main() {
|
||||
}
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
sigs := make(chan os.Signal, 1)
|
||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-sigs
|
||||
log.Println("Shutting down")
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ type SQLite3Storage struct {
|
||||
*TableMailboxes
|
||||
*TableMails
|
||||
*TableQueue
|
||||
db *sql.DB
|
||||
writer *Writer
|
||||
}
|
||||
|
||||
@@ -22,6 +23,7 @@ func NewSQLite3StorageStorage(filename string) (*SQLite3Storage, error) {
|
||||
return nil, fmt.Errorf("sql.Open: %w", err)
|
||||
}
|
||||
s := &SQLite3Storage{
|
||||
db: db,
|
||||
writer: &Writer{
|
||||
todo: make(chan writerTask),
|
||||
},
|
||||
@@ -45,6 +47,10 @@ func NewSQLite3StorageStorage(filename string) (*SQLite3Storage, error) {
|
||||
return s, nil
|
||||
}
|
||||
|
||||
func (s *SQLite3Storage) Close() error {
|
||||
return s.db.Close()
|
||||
}
|
||||
|
||||
type Writer struct {
|
||||
running atomic.Bool
|
||||
todo chan writerTask
|
||||
|
||||
Reference in New Issue
Block a user