Skip to content

Commit dc99724

Browse files
committed
http2: Abort calls destroy with an AbortError
- Builds on nodejs#36048 and nodejs#36084 - Modify test to verify this fact
1 parent 05f68a2 commit dc99724

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

lib/internal/http2/core.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ const {
109109
ERR_OUT_OF_RANGE,
110110
ERR_SOCKET_CLOSED
111111
},
112-
hideStackFrames
112+
hideStackFrames,
113+
AbortError
113114
} = require('internal/errors');
114115
const {
115116
isUint32,
@@ -1725,7 +1726,7 @@ class ClientHttp2Session extends Http2Session {
17251726
const { signal } = options;
17261727
if (signal) {
17271728
validateAbortSignal(signal, 'options.signal');
1728-
const listener = () => stream.destroy();
1729+
const listener = () => stream.destroy(new AbortError());
17291730
signal.addEventListener('abort', listener);
17301731
stream.once('close', () => {
17311732
signal.removeEventListener('abort', listener);

test/parallel/test-http2-client-destroy.js

+13-7
Original file line numberDiff line numberDiff line change
@@ -178,25 +178,31 @@ const Countdown = require('../common/countdown');
178178
server.listen(0, common.mustCall(() => {
179179
const client = h2.connect(`http://localhost:${server.address().port}`);
180180
client.on('close', common.mustCall());
181-
client.on('error', common.mustCall((err) => {
182-
assert.strictEqual(err.code, 'ECONNREFUSED');
183-
assert.strictEqual(signal[kEvents].get('abort'), undefined);
184-
server.close();
185-
}));
186-
181+
187182
const { signal } = controller;
188183
assert.strictEqual(signal[kEvents].get('abort'), undefined);
189184

185+
client.on('error', common.mustCall(() => {
186+
// After underlying stream dies, signal listener detached
187+
assert.strictEqual(signal[kEvents].get('abort'), undefined);
188+
}));
189+
190190
const req = client.request({}, { signal });
191191

192+
req.on('error', common.mustCall((err) => {
193+
assert.strictEqual(err.code, 'ABORT_ERR');
194+
assert.strictEqual(err.name, 'AbortError');
195+
}));
196+
req.on('close', common.mustCall(() => server.close()));
197+
192198
assert.strictEqual(req.aborted, false);
193199
assert.strictEqual(req.destroyed, false);
200+
// Signal listener attached
194201
assert.strictEqual(signal[kEvents].get('abort').size, 1);
195202

196203
controller.abort();
197204

198205
assert.strictEqual(req.aborted, false);
199206
assert.strictEqual(req.destroyed, true);
200-
req.on('close', common.mustCall(() => server.close()));
201207
}));
202208
}

0 commit comments

Comments
 (0)