summaryrefslogtreecommitdiff
path: root/cli/js/ops/dispatch_json.ts
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-03-10 03:04:49 +0100
committerGitHub <noreply@github.com>2020-03-09 22:04:49 -0400
commitdca00211abf311de9fec4f73f8365e430787e3f9 (patch)
tree594fc4cb7fb0a3bc9dba0af69a1b37b4d7f087d5 /cli/js/ops/dispatch_json.ts
parent68119e1d7ed23421ccdcba20532ebe9ae3df9f18 (diff)
use Object instead of Map for promise table (#4309)
Diffstat (limited to 'cli/js/ops/dispatch_json.ts')
-rw-r--r--cli/js/ops/dispatch_json.ts11
1 files changed, 7 insertions, 4 deletions
diff --git a/cli/js/ops/dispatch_json.ts b/cli/js/ops/dispatch_json.ts
index 6fb9007df..4aa1f6b8b 100644
--- a/cli/js/ops/dispatch_json.ts
+++ b/cli/js/ops/dispatch_json.ts
@@ -19,7 +19,10 @@ interface JsonResponse {
promiseId?: number; // Only present in async messages.
}
-const promiseTable = new Map<number, util.Resolvable<JsonResponse>>();
+// Using an object without a prototype because `Map` was causing GC problems.
+const promiseTable: {
+ [key: number]: util.Resolvable<JsonResponse>;
+} = Object.create(null);
let _nextPromiseId = 1;
function nextPromiseId(): number {
@@ -48,9 +51,9 @@ export function asyncMsgFromRust(resUi8: Uint8Array): void {
const res = decode(resUi8);
util.assert(res.promiseId != null);
- const promise = promiseTable.get(res.promiseId!);
+ const promise = promiseTable[res.promiseId!];
util.assert(promise != null);
- promiseTable.delete(res.promiseId!);
+ delete promiseTable[res.promiseId!];
promise.resolve(res);
}
@@ -89,7 +92,7 @@ export async function sendAsync(
promise.resolve(res);
} else {
// Async result.
- promiseTable.set(promiseId, promise);
+ promiseTable[promiseId] = promise;
}
const res = await promise;