Skip to content

Commit ab1c1c4

Browse files
jameshoulahancuthix
authored andcommitted
fix(GODT-2327): Clear update channels whenever clearing sync status
1 parent d7cac8a commit ab1c1c4

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

internal/user/events.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,8 @@ func (user *User) handleRefreshEvent(ctx context.Context, refresh proton.Refresh
113113
user.apiAddrs = groupBy(apiAddrs, func(addr proton.Address) string { return addr.ID })
114114
user.apiLabels = groupBy(apiLabels, func(label proton.Label) string { return label.ID })
115115

116-
// Reinitialize the update channels.
117-
user.initUpdateCh(user.vault.AddressMode())
118-
119116
// Clear sync status; we want to sync everything again.
120-
if err := user.vault.ClearSyncStatus(); err != nil {
117+
if err := user.clearSyncStatus(); err != nil {
121118
return fmt.Errorf("failed to clear sync status: %w", err)
122119
}
123120

internal/user/user.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -274,18 +274,16 @@ func (user *User) SetAddressMode(_ context.Context, mode vault.AddressMode) erro
274274
defer user.goSync()
275275

276276
return safe.LockRet(func() error {
277-
user.initUpdateCh(mode)
278-
279277
if err := user.vault.SetAddressMode(mode); err != nil {
280278
return fmt.Errorf("failed to set address mode: %w", err)
281279
}
282280

283-
if err := user.vault.ClearSyncStatus(); err != nil {
281+
if err := user.clearSyncStatus(); err != nil {
284282
return fmt.Errorf("failed to clear sync status: %w", err)
285283
}
286284

287285
return nil
288-
}, user.apiAddrsLock, user.updateChLock)
286+
}, user.eventLock, user.apiAddrsLock, user.updateChLock)
289287
}
290288

291289
// SetShowAllMail sets whether to show the All Mail mailbox.
@@ -477,14 +475,23 @@ func (user *User) ClearSyncStatus() error {
477475
user.log.Info("Clearing sync status")
478476

479477
return safe.LockRet(func() error {
480-
user.initUpdateCh(user.vault.AddressMode())
478+
return user.clearSyncStatus()
479+
}, user.eventLock, user.apiAddrsLock, user.updateChLock)
480+
}
481481

482-
if err := user.vault.ClearSyncStatus(); err != nil {
483-
return fmt.Errorf("failed to clear sync status: %w", err)
484-
}
482+
// clearSyncStatus clears the sync status of the user.
483+
// This also drops any updates in the update channel(s).
484+
// It is assumed that the eventLock, apiAddrsLock and updateChLock are already locked.
485+
func (user *User) clearSyncStatus() error {
486+
user.log.Info("Clearing sync status")
485487

486-
return nil
487-
}, user.eventLock, user.apiAddrsLock, user.updateChLock)
488+
user.initUpdateCh(user.vault.AddressMode())
489+
490+
if err := user.vault.ClearSyncStatus(); err != nil {
491+
return fmt.Errorf("failed to clear sync status: %w", err)
492+
}
493+
494+
return nil
488495
}
489496

490497
// Logout logs the user out from the API.

0 commit comments

Comments
 (0)