mirror of
https://github.com/denoland/deno.git
synced 2025-03-03 09:31:22 -05:00
use Object instead of Map for promise table (#4309)
This commit is contained in:
parent
68119e1d7e
commit
dca00211ab
2 changed files with 15 additions and 8 deletions
|
@ -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;
|
||||
|
|
|
@ -4,7 +4,11 @@ import { core } from "../core.ts";
|
|||
import { TextDecoder } from "../web/text_encoding.ts";
|
||||
import { ErrorKind, errors, getErrorClass } from "../errors.ts";
|
||||
|
||||
const promiseTableMin = new Map<number, util.Resolvable<RecordMinimal>>();
|
||||
// Using an object without a prototype because `Map` was causing GC problems.
|
||||
const promiseTableMin: {
|
||||
[key: number]: util.Resolvable<RecordMinimal>;
|
||||
} = Object.create(null);
|
||||
|
||||
// Note it's important that promiseId starts at 1 instead of 0, because sync
|
||||
// messages are indicated with promiseId 0. If we ever add wrap around logic for
|
||||
// overflows, this should be taken into account.
|
||||
|
@ -72,8 +76,8 @@ util.assert(scratchBytes.byteLength === scratch32.length * 4);
|
|||
export function asyncMsgFromRust(ui8: Uint8Array): void {
|
||||
const record = recordFromBufMinimal(ui8);
|
||||
const { promiseId } = record;
|
||||
const promise = promiseTableMin.get(promiseId);
|
||||
promiseTableMin.delete(promiseId);
|
||||
const promise = promiseTableMin[promiseId];
|
||||
delete promiseTableMin[promiseId];
|
||||
util.assert(promise);
|
||||
promise.resolve(record);
|
||||
}
|
||||
|
@ -95,7 +99,7 @@ export async function sendAsyncMinimal(
|
|||
promise.resolve(record);
|
||||
} else {
|
||||
// Async result.
|
||||
promiseTableMin.set(promiseId, promise);
|
||||
promiseTableMin[promiseId] = promise;
|
||||
}
|
||||
|
||||
const res = await promise;
|
||||
|
|
Loading…
Add table
Reference in a new issue