Skip to content

Commit 0689fbb

Browse files
divybotlittledivy
andauthored
fix(ext/node): emit drained server close on next tick for Node parity (#33672)
Enables `test-http2-allow-http1` in node_compat suite. --------- Co-authored-by: divybot <divybot@users.noreply.github.com> Co-authored-by: Divy Srivastava <me@littledivy.com>
1 parent 96e539a commit 0689fbb

3 files changed

Lines changed: 28 additions & 4 deletions

File tree

ext/node/polyfills/_http_server.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,10 @@ ServerResponse.prototype.assignSocket = function assignSocket(socket) {
304304
throw new ERR_HTTP_SOCKET_ASSIGNED();
305305
}
306306
socket._httpMessage = this;
307+
if (socket._parent) {
308+
socket._parent._httpMessage = this;
309+
socket._parent._httpMessageDetached = false;
310+
}
307311
socket.on("close", onServerResponseClose);
308312
this.socket = socket;
309313
this.emit("socket", socket);
@@ -315,6 +319,10 @@ ServerResponse.prototype.detachSocket = function detachSocket(socket) {
315319
socket.removeListener("close", onServerResponseClose);
316320
socket._httpMessage = null;
317321
socket._httpMessageDetached = true;
322+
if (socket._parent) {
323+
socket._parent._httpMessage = null;
324+
socket._parent._httpMessageDetached = true;
325+
}
318326
this.socket = null;
319327
};
320328

ext/node/polyfills/net.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,10 +1859,25 @@ Socket.prototype._destroy = function (exception, cb) {
18591859

18601860
if (this._server) {
18611861
debug("has server");
1862-
this._server._connections--;
1863-
1864-
if (this._server._emitCloseIfDrained) {
1865-
this._server._emitCloseIfDrained();
1862+
const server = this._server;
1863+
server._connections--;
1864+
1865+
if (server._emitCloseIfDrained) {
1866+
if (
1867+
!server._handle &&
1868+
server._connections === 0 &&
1869+
this._httpMessageDetached === true &&
1870+
!this._httpMessage
1871+
) {
1872+
defaultTriggerAsyncIdScope(
1873+
server[asyncIdSymbol],
1874+
nextTick,
1875+
_emitCloseNT,
1876+
server,
1877+
);
1878+
} else {
1879+
server._emitCloseIfDrained();
1880+
}
18661881
}
18671882
}
18681883
};

tests/node_compat/config.jsonc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,6 +1638,7 @@
16381638
"parallel/test-http.js": {},
16391639
"parallel/test-http2-async-local-storage.js": {},
16401640
"parallel/test-http2-alpn.js": {},
1641+
"parallel/test-http2-allow-http1.js": {},
16411642
"parallel/test-http2-altsvc.js": {},
16421643
"parallel/test-http2-autoselect-protocol.js": {},
16431644
"parallel/test-http2-backpressure.js": {},

0 commit comments

Comments
 (0)