mirror of
https://github.com/denoland/deno.git
synced 2025-03-03 09:31:22 -05:00
refactor: use Deno.core.tryClose (#11980)
This commit is contained in:
parent
bd4ca721eb
commit
ba8bbe6f1c
5 changed files with 33 additions and 85 deletions
11
core/lib.deno_core.d.ts
vendored
11
core/lib.deno_core.d.ts
vendored
|
@ -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>;
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Add table
Reference in a new issue