Compare commits

...

2 Commits

Author SHA1 Message Date
Jarred Sumner
b3fbcc2d58 test(node): add http writable after close test 2025-05-28 22:37:02 -07:00
github-actions[bot]
1855836259 deps: update c-ares to v1.34.5 (#19897)
Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com>
2025-05-28 19:50:29 -07:00
4 changed files with 46 additions and 4 deletions

View File

@@ -4,7 +4,7 @@ register_repository(
REPOSITORY
c-ares/c-ares
COMMIT
4f4912bce7374f787b10576851b687935f018e17
d3a507e920e7af18a5efb7f9f1d8044ed4750013
)
register_cmake_command(

View File

@@ -166,6 +166,9 @@ function callCloseCallback(self) {
}
function emitCloseNT(self) {
if (!self._closed) {
if (self._ended !== undefined) {
self._ended = true;
}
self.destroyed = true;
self._closed = true;
callCloseCallback(self);

View File

@@ -272,9 +272,7 @@ const ServerResponsePrototype = {
}
this.detachSocket(socket);
this.finished = true;
process.nextTick(self => {
self._ended = true;
}, this);
// Marking _ended happens on 'close' to align with Node.js behavior
this.emit("prefinish");
this._callPendingCallbacks();

View File

@@ -0,0 +1,41 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const { get, createServer } = require('http');
// res.writable should not be set to false after it has finished sending
// Ref: https://github.com/nodejs/node/issues/15029
let internal;
let external;
// Proxy server
const server = createServer(common.mustCall((req, res) => {
const listener = common.mustCall(() => {
assert.strictEqual(res.writable, true);
});
// on CentOS 5, 'finish' is emitted
res.on('finish', listener);
// Everywhere else, 'close' is emitted
res.on('close', listener);
get(`http://127.0.0.1:${internal.address().port}`, common.mustCall((inner) => {
inner.pipe(res);
}));
})).listen(0, () => {
// Http server
internal = createServer((req, res) => {
res.writeHead(200);
setImmediate(common.mustCall(() => {
external.abort();
res.end('Hello World\n');
}));
}).listen(0, () => {
external = get(`http://127.0.0.1:${server.address().port}`);
external.on('error', common.mustCall(() => {
server.close();
internal.close();
}));
});
});