summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/lib.deno_core.d.ts11
-rw-r--r--ext/fetch/26_fetch.js48
-rw-r--r--ext/http/01_http.js13
-rw-r--r--ext/websocket/01_websocket.js21
-rw-r--r--ext/websocket/02_websocketstream.js25
5 files changed, 33 insertions, 85 deletions
diff --git a/core/lib.deno_core.d.ts b/core/lib.deno_core.d.ts
index 2c69782a6..46cf6b42c 100644
--- a/core/lib.deno_core.d.ts
+++ b/core/lib.deno_core.d.ts
@@ -33,9 +33,18 @@ declare namespace Deno {
*/
function resources(): Record<string, string>;
- /** Close the resource with the specified op id. */
+ /**
+ * Close the resource with the specified op id. Throws `BadResource` error
+ * if resource doesn't exist in resource table.
+ */
function close(rid: number): void;
+ /**
+ * Try close the resource with the specified op id; if resource with given
+ * id doesn't exist do nothing.
+ */
+ function tryClose(rid: number): void;
+
/** Get heap stats for current isolate/worker */
function heapStats(): Record<string, number>;
diff --git a/ext/fetch/26_fetch.js b/ext/fetch/26_fetch.js
index ada524fcb..b81e66947 100644
--- a/ext/fetch/26_fetch.js
+++ b/ext/fetch/26_fetch.js
@@ -86,11 +86,7 @@
// A finalization registry to clean up underlying fetch resources that are GC'ed.
const RESOURCE_REGISTRY = new FinalizationRegistry((rid) => {
- try {
- core.close(rid);
- } catch {
- // might have already been closed
- }
+ core.tryClose(rid);
});
/**
@@ -106,11 +102,7 @@
new DOMException("Ongoing fetch was aborted.", "AbortError"),
);
}
- try {
- core.close(responseBodyRid);
- } catch (_) {
- // might have already been closed
- }
+ core.tryClose(responseBodyRid);
}
// TODO(lucacasonato): clean up registration
terminator[abortSignal.add](onAbort);
@@ -132,11 +124,7 @@
RESOURCE_REGISTRY.unregister(readable);
// We have reached the end of the body, so we close the stream.
controller.close();
- try {
- core.close(responseBodyRid);
- } catch (_) {
- // might have already been closed
- }
+ core.tryClose(responseBodyRid);
}
} catch (err) {
RESOURCE_REGISTRY.unregister(readable);
@@ -149,11 +137,7 @@
// error.
controller.error(err);
}
- try {
- core.close(responseBodyRid);
- } catch (_) {
- // might have already been closed
- }
+ core.tryClose(responseBodyRid);
}
},
cancel() {
@@ -234,15 +218,11 @@
}, reqBody instanceof Uint8Array ? reqBody : null);
function onAbort() {
- try {
- core.close(cancelHandleRid);
- } catch (_) {
- // might have already been closed
+ if (cancelHandleRid !== null) {
+ core.tryClose(cancelHandleRid);
}
- try {
- core.close(requestBodyRid);
- } catch (_) {
- // might have already been closed
+ if (requestBodyRid !== null) {
+ core.tryClose(requestBodyRid);
}
}
terminator[abortSignal.add](onAbort);
@@ -280,11 +260,7 @@
break;
}
}
- try {
- core.close(requestBodyRid);
- } catch (_) {
- // might have already been closed
- }
+ core.tryClose(requestBodyRid);
})();
}
@@ -295,10 +271,8 @@
throw err;
});
} finally {
- try {
- core.close(cancelHandleRid);
- } catch (_) {
- // might have already been closed
+ if (cancelHandleRid !== null) {
+ core.tryClose(cancelHandleRid);
}
}
if (terminator.aborted) return abortedNetworkError();
diff --git a/ext/http/01_http.js b/ext/http/01_http.js
index 6e3bb5c80..723293689 100644
--- a/ext/http/01_http.js
+++ b/ext/http/01_http.js
@@ -120,11 +120,7 @@
/** @returns {void} */
close() {
for (const rid of SetPrototypeValues(this.managedResources)) {
- try {
- core.close(rid);
- } catch (_e) {
- // pass, might have already been closed
- }
+ core.tryClose(rid);
}
core.close(this.#rid);
}
@@ -284,12 +280,7 @@
const event = new CloseEvent("close");
ws.dispatchEvent(event);
- try {
- core.close(wsRid);
- } catch (err) {
- // Ignore error if the socket has already been closed.
- if (!(err instanceof Deno.errors.BadResource)) throw err;
- }
+ core.tryClose(wsRid);
} else {
ws[_readyState] = WebSocket.OPEN;
const event = new Event("open");
diff --git a/ext/websocket/01_websocket.js b/ext/websocket/01_websocket.js
index df8063d21..79e4d923c 100644
--- a/ext/websocket/01_websocket.js
+++ b/ext/websocket/01_websocket.js
@@ -65,19 +65,6 @@
const CLOSING = 2;
const CLOSED = 3;
- /**
- * Tries to close the resource (and ignores BadResource errors).
- * @param {number} rid
- */
- function tryClose(rid) {
- try {
- core.close(rid);
- } catch (err) {
- // Ignore error if the socket has already been closed.
- if (!(err instanceof Deno.errors.BadResource)) throw err;
- }
- }
-
const handlerSymbol = Symbol("eventHandlers");
function makeWrappedHandler(handler) {
function wrappedHandler(...args) {
@@ -292,7 +279,7 @@
const event = new CloseEvent("close");
this.dispatchEvent(event);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
},
);
} else {
@@ -430,7 +417,7 @@
reason,
});
this.dispatchEvent(event);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
},
);
}
@@ -484,7 +471,7 @@
reason: value.reason,
});
this.dispatchEvent(event);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
break;
}
case "error": {
@@ -497,7 +484,7 @@
const closeEv = new CloseEvent("close");
this.dispatchEvent(closeEv);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
break;
}
}
diff --git a/ext/websocket/02_websocketstream.js b/ext/websocket/02_websocketstream.js
index 4e901f53a..f7c4d4d0f 100644
--- a/ext/websocket/02_websocketstream.js
+++ b/ext/websocket/02_websocketstream.js
@@ -56,19 +56,6 @@
],
);
- /**
- * Tries to close the resource (and ignores BadResource errors).
- * @param {number} rid
- */
- function tryClose(rid) {
- try {
- core.close(rid);
- } catch (err) {
- // Ignore error if the socket has already been closed.
- if (!(err instanceof Deno.errors.BadResource)) throw err;
- }
- }
-
const _rid = Symbol("[[rid]]");
const _url = Symbol("[[url]]");
const _connection = Symbol("[[connection]]");
@@ -279,7 +266,7 @@
case "close": {
if (this[_closing]) {
this[_closed].resolve(value);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
} else {
PromisePrototypeThen(
core.opAsync("op_ws_close", {
@@ -288,12 +275,12 @@
}),
() => {
this[_closed].resolve(value);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
},
(err) => {
this[_closed].reject(err);
controller.error(err);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
},
);
}
@@ -303,7 +290,7 @@
const err = new Error(value);
this[_closed].reject(err);
controller.error(err);
- tryClose(this[_rid]);
+ core.tryClose(this[_rid]);
break;
}
}
@@ -327,7 +314,7 @@
}
},
(err) => {
- tryClose(cancelRid);
+ core.tryClose(cancelRid);
this[_connection].reject(err);
this[_closed].reject(err);
},
@@ -393,7 +380,7 @@
reason: closeInfo.reason,
}),
(err) => {
- this[_rid] && tryClose(this[_rid]);
+ this[_rid] && core.tryClose(this[_rid]);
this[_closed].reject(err);
},
);