From 9e54c921c83fedb3b816e1a98b30e1ff2a10b542 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Sun, 25 Sep 2022 14:38:46 -0500 Subject: [PATCH] checkmail: protect access to acct.checkingmail A data race exists between the timer goroutine and the main goroutine for checking / setting the status of acct.checkingmail. Protect access to this value with a mutex Signed-off-by: Tim Culverhouse Acked-by: Robin Jarry --- widgets/account.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/widgets/account.go b/widgets/account.go index 8cac373..382a07a 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -3,6 +3,7 @@ package widgets import ( "errors" "fmt" + "sync" "time" "github.com/gdamore/tcell/v2" @@ -22,6 +23,7 @@ import ( var _ ProvidesMessages = (*AccountView)(nil) type AccountView struct { + sync.Mutex acct *config.AccountConfig aerc *Aerc conf *config.AercConfig @@ -418,6 +420,8 @@ func (acct *AccountView) GetSortCriteria() []*types.SortCriterion { } func (acct *AccountView) CheckMail() { + acct.Lock() + defer acct.Unlock() if acct.checkingMail { return } @@ -436,7 +440,9 @@ func (acct *AccountView) CheckMail() { acct.checkingMail = true acct.worker.PostAction(msg, func(_ types.WorkerMessage) { acct.SetStatus(statusline.ConnectionActivity("")) + acct.Lock() acct.checkingMail = false + acct.Unlock() }) }