From 936d21d74975d975c195f96e7b1fe18ad6dd719a Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:56:53 -0800 Subject: [PATCH] Don't run storage service concurrently with backup --- ts/background.ts | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/ts/background.ts b/ts/background.ts index 89dfa50a3..09ce6dabd 100644 --- a/ts/background.ts +++ b/ts/background.ts @@ -403,6 +403,8 @@ export async function startApp(): Promise { accountManager = new window.textsecure.AccountManager(server); accountManager.addEventListener('startRegistration', () => { + pauseProcessing(); + backupReady.reject(new Error('startRegistration')); backupReady = explodePromise(); }); @@ -741,9 +743,7 @@ export async function startApp(): Promise { 'WebAPI should be initialized together with MessageReceiver' ); log.info('background/shutdown: shutting down messageReceiver'); - server.unregisterRequestHandler(messageReceiver); - StorageService.disableStorageService(); - messageReceiver.stopProcessing(); + pauseProcessing(); await window.waitForAllBatchers(); } @@ -1147,6 +1147,18 @@ export async function startApp(): Promise { log.info('Storage fetch'); drop(window.storage.fetch()); + function pauseProcessing() { + strictAssert(server != null, 'WebAPI not initialized'); + strictAssert( + messageReceiver != null, + 'messageReceiver must be initialized' + ); + + StorageService.disableStorageService(); + server.unregisterRequestHandler(messageReceiver); + messageReceiver.stopProcessing(); + } + function setupAppState() { initializeRedux(getParametersForRedux()); @@ -1627,6 +1639,9 @@ export async function startApp(): Promise { server.registerRequestHandler(messageReceiver); drop(runStorageService({ reason: 'afterStart' })); + + // Opposite of `messageReceiver.stopProcessing` + messageReceiver.reset(); } window.getSyncRequest = (timeoutMillis?: number) => { @@ -3051,9 +3066,8 @@ export async function startApp(): Promise { if (messageReceiver) { log.info('unlinkAndDisconnect: logging out'); strictAssert(server !== undefined, 'WebAPI not initialized'); - server.unregisterRequestHandler(messageReceiver); - StorageService.disableStorageService(); - messageReceiver.stopProcessing(); + + pauseProcessing(); backupReady.reject(new Error('Aborted')); backupReady = explodePromise();