forked from Silverfish/proton-bridge
GODT-2266: Pause event stream while sending
This commit is contained in:
@ -158,7 +158,7 @@ func (user *User) sendMail(authID string, from string, to []string, r io.Reader)
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}, user.apiUserLock, user.apiAddrsLock)
|
}, user.apiUserLock, user.apiAddrsLock, user.eventLock)
|
||||||
}
|
}
|
||||||
|
|
||||||
// sendWithKey sends the message with the given address key.
|
// sendWithKey sends the message with the given address key.
|
||||||
|
|||||||
@ -60,9 +60,11 @@ type User struct {
|
|||||||
vault *vault.User
|
vault *vault.User
|
||||||
client *proton.Client
|
client *proton.Client
|
||||||
reporter reporter.Reporter
|
reporter reporter.Reporter
|
||||||
eventCh *queue.QueuedChannel[events.Event]
|
|
||||||
sendHash *sendRecorder
|
sendHash *sendRecorder
|
||||||
|
|
||||||
|
eventCh *queue.QueuedChannel[events.Event]
|
||||||
|
eventLock safe.RWMutex
|
||||||
|
|
||||||
apiUser proton.User
|
apiUser proton.User
|
||||||
apiUserLock safe.RWMutex
|
apiUserLock safe.RWMutex
|
||||||
|
|
||||||
@ -120,9 +122,11 @@ func New(
|
|||||||
vault: encVault,
|
vault: encVault,
|
||||||
client: client,
|
client: client,
|
||||||
reporter: reporter,
|
reporter: reporter,
|
||||||
eventCh: queue.NewQueuedChannel[events.Event](0, 0),
|
|
||||||
sendHash: newSendRecorder(sendEntryExpiry),
|
sendHash: newSendRecorder(sendEntryExpiry),
|
||||||
|
|
||||||
|
eventCh: queue.NewQueuedChannel[events.Event](0, 0),
|
||||||
|
eventLock: safe.NewRWMutex(),
|
||||||
|
|
||||||
apiUser: apiUser,
|
apiUser: apiUser,
|
||||||
apiUserLock: safe.NewRWMutex(),
|
apiUserLock: safe.NewRWMutex(),
|
||||||
|
|
||||||
@ -548,6 +552,9 @@ func (user *User) initUpdateCh(mode vault.AddressMode) {
|
|||||||
|
|
||||||
// doEventPoll is called whenever API events should be polled.
|
// doEventPoll is called whenever API events should be polled.
|
||||||
func (user *User) doEventPoll(ctx context.Context) error {
|
func (user *User) doEventPoll(ctx context.Context) error {
|
||||||
|
user.eventLock.Lock()
|
||||||
|
defer user.eventLock.Unlock()
|
||||||
|
|
||||||
event, err := user.client.GetEvent(ctx, user.vault.EventID())
|
event, err := user.client.GetEvent(ctx, user.vault.EventID())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get event: %w", err)
|
return fmt.Errorf("failed to get event: %w", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user