diff options
author | Luca Casonato <hello@lcas.dev> | 2023-11-01 20:26:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-01 20:26:12 +0100 |
commit | d42f1543121e7245789a96a485d1ef7645cb5fba (patch) | |
tree | d57a10ac527fe5b6796a3a8866af95f0f1a5d7bd /ext/net | |
parent | 1d19b1011bd7df50598f5981408c2d78c35b76d2 (diff) |
feat: disposable Deno resources (#20845)
This commit implements Symbol.dispose and Symbol.asyncDispose for
the relevant resources.
Closes #20839
---------
Signed-off-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/net')
-rw-r--r-- | ext/net/01_net.js | 10 | ||||
-rw-r--r-- | ext/net/lib.deno_net.d.ts | 6 |
2 files changed, 14 insertions, 2 deletions
diff --git a/ext/net/01_net.js b/ext/net/01_net.js index f2bf5e7df..05aca07e5 100644 --- a/ext/net/01_net.js +++ b/ext/net/01_net.js @@ -9,6 +9,8 @@ import { writableStreamForRid, } from "ext:deno_web/06_streams.js"; import * as abortSignal from "ext:deno_web/03_abort_signal.js"; +import { SymbolDispose } from "ext:deno_web/00_infra.js"; + const primordials = globalThis.__bootstrap.primordials; const { ArrayPrototypeFilter, @@ -160,6 +162,10 @@ class Conn { (id) => core.unrefOp(id), ); } + + [SymbolDispose]() { + core.tryClose(this.#rid); + } } class TcpConn extends Conn { @@ -249,6 +255,10 @@ class Listener { core.close(this.rid); } + [SymbolDispose]() { + core.tryClose(this.#rid); + } + [SymbolAsyncIterator]() { return this; } diff --git a/ext/net/lib.deno_net.d.ts b/ext/net/lib.deno_net.d.ts index 030157d63..79e15563a 100644 --- a/ext/net/lib.deno_net.d.ts +++ b/ext/net/lib.deno_net.d.ts @@ -2,6 +2,7 @@ /// <reference no-default-lib="true" /> /// <reference lib="esnext" /> +/// <reference lib="esnext.disposable" /> declare namespace Deno { /** @category Network */ @@ -24,7 +25,8 @@ declare namespace Deno { * * @category Network */ - export interface Listener<T extends Conn = Conn> extends AsyncIterable<T> { + export interface Listener<T extends Conn = Conn> + extends AsyncIterable<T>, Disposable { /** Waits for and resolves to the next connection to the `Listener`. */ accept(): Promise<T>; /** Close closes the listener. Any pending accept promises will be rejected @@ -57,7 +59,7 @@ declare namespace Deno { export type TlsListener = Listener<TlsConn>; /** @category Network */ - export interface Conn extends Reader, Writer, Closer { + export interface Conn extends Reader, Writer, Closer, Disposable { /** The local address of the connection. */ readonly localAddr: Addr; /** The remote address of the connection. */ |