diff options
-rw-r--r-- | core/lib.deno_core.d.ts | 11 | ||||
-rw-r--r-- | ext/fetch/26_fetch.js | 48 | ||||
-rw-r--r-- | ext/http/01_http.js | 13 | ||||
-rw-r--r-- | ext/websocket/01_websocket.js | 21 | ||||
-rw-r--r-- | ext/websocket/02_websocketstream.js | 25 |
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); }, ); |