From 15751f35213afa98659e52c97a0768c81c8a2683 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Wed, 15 Aug 2018 15:14:12 -0700 Subject: [PATCH] MessageReceiver.queueAllCached: Give event loop a rest We don't want to queue multiple hundreds of messages at once, so we let the event loop catch up every 20 messages queued. --- libtextsecure/message_receiver.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index aa3e77a720..897dd6eaa5 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -268,12 +268,17 @@ MessageReceiver.prototype.extend({ ev.count = count; this.dispatchEvent(ev); }, - queueAllCached() { - return this.getAllFromCache().then(items => { - for (let i = 0, max = items.length; i < max; i += 1) { - this.queueCached(items[i]); + async queueAllCached() { + const items = await this.getAllFromCache(); + for (let i = 0, max = items.length; i < max; i += 1) { + if (i > 0 && i % 20 === 0) { + window.log.info('queueAllCached: Giving event loop a rest'); + // eslint-disable-next-line no-await-in-loop + await new Promise(resolve => setTimeout(resolve, 2000)); } - }); + + this.queueCached(items[i]); + } }, async queueCached(item) { try {