From 0697d1d6d4940fb2618165a8e718d235a3380f24 Mon Sep 17 00:00:00 2001
From: Travis Ralston <travisr@matrix.org>
Date: Wed, 10 Aug 2022 19:34:21 -0400
Subject: [PATCH] Fix race condition in `AccountSettingsHandler` local echo
 (#9172)

Should fix https://github.com/vector-im/element-web/issues/23006
---
 src/settings/handlers/AccountSettingsHandler.ts | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/settings/handlers/AccountSettingsHandler.ts b/src/settings/handlers/AccountSettingsHandler.ts
index d1a2c6c622..f7a5fe9ca5 100644
--- a/src/settings/handlers/AccountSettingsHandler.ts
+++ b/src/settings/handlers/AccountSettingsHandler.ts
@@ -165,8 +165,8 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa
 
         content[field] = value;
 
-        await this.client.setAccountData(eventType, content);
-
+        // Attach a deferred *before* setting the account data to ensure we catch any requests
+        // which race between different lines.
         const deferred = defer<void>();
         const handler = (event: MatrixEvent) => {
             if (event.getType() !== eventType || event.getContent()[field] !== value) return;
@@ -175,6 +175,8 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa
         };
         this.client.on(ClientEvent.AccountData, handler);
 
+        await this.client.setAccountData(eventType, content);
+
         await deferred.promise;
     }