GODT-2266: Pause event stream while sending

This commit is contained in:
James Houlahan 2023-01-25 09:43:58 +01:00
parent 5d4c10c56e
commit e8a778feca
2 changed files with 10 additions and 3 deletions

View File

@ -158,7 +158,7 @@ func (user *User) sendMail(authID string, from string, to []string, r io.Reader)
return nil
})
}, user.apiUserLock, user.apiAddrsLock)
}, user.apiUserLock, user.apiAddrsLock, user.eventLock)
}
// sendWithKey sends the message with the given address key.

View File

@ -60,9 +60,11 @@ type User struct {
vault *vault.User
client *proton.Client
reporter reporter.Reporter
eventCh *queue.QueuedChannel[events.Event]
sendHash *sendRecorder
eventCh *queue.QueuedChannel[events.Event]
eventLock safe.RWMutex
apiUser proton.User
apiUserLock safe.RWMutex
@ -120,9 +122,11 @@ func New(
vault: encVault,
client: client,
reporter: reporter,
eventCh: queue.NewQueuedChannel[events.Event](0, 0),
sendHash: newSendRecorder(sendEntryExpiry),
eventCh: queue.NewQueuedChannel[events.Event](0, 0),
eventLock: safe.NewRWMutex(),
apiUser: apiUser,
apiUserLock: safe.NewRWMutex(),
@ -548,6 +552,9 @@ func (user *User) initUpdateCh(mode vault.AddressMode) {
// doEventPoll is called whenever API events should be polled.
func (user *User) doEventPoll(ctx context.Context) error {
user.eventLock.Lock()
defer user.eventLock.Unlock()
event, err := user.client.GetEvent(ctx, user.vault.EventID())
if err != nil {
return fmt.Errorf("failed to get event: %w", err)