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