From 0d9b6138d6c14d0ac56451542bb5493747b346d0 Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Mon, 25 Mar 2024 15:43:45 +0000 Subject: [PATCH] fix: race condition with empty PreferredName (status-desktop/14053) (#4981) --- protocol/messenger_identity.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/protocol/messenger_identity.go b/protocol/messenger_identity.go index 52c2b1f0a..f9f2d3842 100644 --- a/protocol/messenger_identity.go +++ b/protocol/messenger_identity.go @@ -106,15 +106,22 @@ func (m *Messenger) SaveSyncDisplayName(displayName string, clock uint64) error return err } + preferredName, err := m.settings.GetPreferredUsername() + if err != nil { + return err + } + preferredNameClock, err := m.settings.GetSettingLastSynced(settings.PreferredName) if err != nil { return err } // When either the display name or preferred name changes, m.account.Name should be updated. // However, a race condition can occur during BackupData, where m.account.Name could be incorrectly updated. - // The final value of m.account.Name depending on which backup message(BackedUpProfile/BackedUpSettings) arrives later. + // The final value of m.account.Name depends on which backup message(BackedUpProfile/BackedUpSettings) arrives later. // So we should check the clock of the preferred name and only update m.account.Name if it's older than the display name. - if preferredNameClock < clock { + // Yet even if the preferred name clock is older, but the preferred name was empty, we should still update m.account.Name. + + if preferredNameClock < clock || preferredName == "" { m.account.Name = displayName return m.multiAccounts.SaveAccount(*m.account) }