@@ -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