summaryrefslogtreecommitdiff
path: root/ext/web
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2023-12-24 06:04:32 -0700
committerGitHub <noreply@github.com>2023-12-24 13:04:32 +0000
commit92b2e28c6491f339124ec5851173ac0aaef93908 (patch)
tree3910827b2772379054c15c4c3f133175138baf36 /ext/web
parent1297c9a8f379d89691522c5cc0c6071c479e95a1 (diff)
chore: ensure that each op provided to ensureFastOps is only used once (#21689)
When we migrate to op-import-per-extension, we will want to ensure that ops have one and only one place where they are imported. This tackles the ops that are imported via `ensureFastOps`, but does not yet tackle direct `ops` imports. Landing ahead of https://github.com/denoland/deno_core/pull/393
Diffstat (limited to 'ext/web')
-rw-r--r--ext/web/02_timers.js8
-rw-r--r--ext/web/06_streams.js1
-rw-r--r--ext/web/13_message_port.js3
3 files changed, 11 insertions, 1 deletions
diff --git a/ext/web/02_timers.js b/ext/web/02_timers.js
index 27a9fcbde..c7dc90c82 100644
--- a/ext/web/02_timers.js
+++ b/ext/web/02_timers.js
@@ -386,9 +386,17 @@ function unrefTimer(id) {
core.unrefOpPromise(timerInfo.promise);
}
+// Defer to avoid starving the event loop. Not using queueMicrotask()
+// for that reason: it lets promises make forward progress but can
+// still starve other parts of the event loop.
+function defer(go) {
+ PromisePrototypeThen(op_void_async_deferred(), () => go());
+}
+
export {
clearInterval,
clearTimeout,
+ defer,
handleTimerMacrotask,
opNow,
refTimer,
diff --git a/ext/web/06_streams.js b/ext/web/06_streams.js
index 1df375328..988f1d990 100644
--- a/ext/web/06_streams.js
+++ b/ext/web/06_streams.js
@@ -6895,6 +6895,7 @@ export {
errorReadableStream,
getReadableStreamResourceBacking,
getWritableStreamResourceBacking,
+ isDetachedBuffer,
isReadableStreamDisturbed,
ReadableByteStreamController,
ReadableStream,
diff --git a/ext/web/13_message_port.js b/ext/web/13_message_port.js
index c1ba3f4c4..9645f5f11 100644
--- a/ext/web/13_message_port.js
+++ b/ext/web/13_message_port.js
@@ -17,6 +17,7 @@ import {
setEventTargetData,
setIsTrusted,
} from "ext:deno_web/02_event.js";
+import { isDetachedBuffer } from "ext:deno_web/06_streams.js";
import DOMException from "ext:deno_web/01_dom_exception.js";
const {
ArrayBufferPrototype,
@@ -282,7 +283,7 @@ function serializeJsMessageData(data, transferables) {
if (ObjectPrototypeIsPrototypeOf(ArrayBufferPrototype, t)) {
if (
ArrayBufferPrototypeGetByteLength(t) === 0 &&
- ops.op_arraybuffer_was_detached(t)
+ isDetachedBuffer(t)
) {
throw new DOMException(
`ArrayBuffer at index ${j} is already detached`,