summaryrefslogtreecommitdiff
path: root/ext/node
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-05-22 01:02:10 +0200
committerGitHub <noreply@github.com>2023-05-22 01:02:10 +0200
commit40bda07ff5751cbb2665a2d134f64826fe3790a8 (patch)
tree6b7527ec463551ba86bd20d640616e39f4e2e461 /ext/node
parent9ec49897766d9c22f6c7bafabdd3e3f3a4b68ab1 (diff)
fix(node): add http.Server.unref() (#19201)
Closes https://github.com/denoland/deno/issues/19113
Diffstat (limited to 'ext/node')
-rw-r--r--ext/node/polyfills/http.ts25
1 files changed, 23 insertions, 2 deletions
diff --git a/ext/node/polyfills/http.ts b/ext/node/polyfills/http.ts
index 065ad2e0f..101d888f8 100644
--- a/ext/node/polyfills/http.ts
+++ b/ext/node/polyfills/http.ts
@@ -1500,6 +1500,8 @@ class ServerImpl extends EventEmitter {
#addr: Deno.NetAddr;
#hasClosed = false;
+ #server: Deno.Server;
+ #unref = false;
#ac?: AbortController;
#servePromise: Deferred<void>;
listening = false;
@@ -1566,7 +1568,7 @@ class ServerImpl extends EventEmitter {
return;
}
this.#ac = ac;
- serve(
+ this.#server = serve(
{
handler: handler as Deno.ServeHandler,
...this.#addr,
@@ -1577,13 +1579,31 @@ class ServerImpl extends EventEmitter {
this.emit("listening");
},
},
- ).finished.then(() => this.#servePromise!.resolve());
+ );
+ if (this.#unref) {
+ this.#server.unref();
+ }
+ this.#server.finished.then(() => this.#servePromise!.resolve());
}
setTimeout() {
console.error("Not implemented: Server.setTimeout()");
}
+ ref() {
+ if (this.#server) {
+ this.#server.ref();
+ }
+ this.#unref = false;
+ }
+
+ unref() {
+ if (this.#server) {
+ this.#server.unref();
+ }
+ this.#unref = true;
+ }
+
close(cb?: (err?: Error) => void): this {
const listening = this.listening;
this.listening = false;
@@ -1606,6 +1626,7 @@ class ServerImpl extends EventEmitter {
this.#servePromise!.resolve();
}
+ this.#server = undefined;
return this;
}