diff --git a/src/channel/channel.ts b/src/channel/channel.ts index a8c4414b2..9ffd58f9c 100644 --- a/src/channel/channel.ts +++ b/src/channel/channel.ts @@ -15,21 +15,20 @@ const drainQueue = (port: chrome.runtime.Port, buffer: Array) => { return; } - const remove = new Array(); + let removed = 0; const send = (m: Message, index: number) => { - try { - port.postMessage(m); - remove.push(index); - } - catch (error) {} // retry later + port.postMessage(m); + ++removed; }; - buffer.forEach(send); - - for (const index of remove.reverse()) { - buffer.splice(index, 1); + try { + buffer.forEach(send); + } catch (error) { + // port disconnected, re-try on connect. } + + buffer.splice(0, removed); }; chrome.runtime.onMessage.addListener(