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 <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
Tim Culverhouse 2022-09-25 14:38:46 -05:00 committed by Robin Jarry
parent 716ade8968
commit 9e54c921c8

View file

@ -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()
})
}