From 0697d1d6d4940fb2618165a8e718d235a3380f24 Mon Sep 17 00:00:00 2001 From: Travis Ralston 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(); 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; }