Skip to content
This repository was archived by the owner on Jul 6, 2018. It is now read-only.

Commit febd342

Browse files
committed
http2: Do not imply a callback to compat res.write
Fixes: #135
1 parent 5cc2b2a commit febd342

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

lib/internal/http2/compat.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,11 @@ class Http2ServerResponse extends Stream {
417417
write(chunk, encoding, cb) {
418418
var stream = this[kStream];
419419
if (stream === undefined) {
420-
cb(new Error('HTTP/2 Stream has been closed'));
420+
var err = new Error('HTTP/2 Stream has been closed');
421+
if (cb)
422+
cb(err);
423+
else
424+
this.emit('error', err);
421425
return;
422426
}
423427
var beginSend = this[kBeginSend];
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const assert = require('assert');
5+
const h2 = require('http2');
6+
7+
// Http2ServerResponse.write does not imply there is a callback
8+
9+
const server = h2.createServer();
10+
server.listen(0, common.mustCall(function() {
11+
const port = server.address().port;
12+
const url = `http://localhost:${port}`;
13+
const client = h2.connect(url, common.mustCall(function() {
14+
const headers = {
15+
':path': '/',
16+
':method': 'GET',
17+
':scheme': 'http',
18+
':authority': `localhost:${port}`
19+
};
20+
const request = client.request(headers);
21+
request.end();
22+
request.resume();
23+
}));
24+
25+
server.once('request', common.mustCall(function(request, response) {
26+
client.destroy();
27+
setImmediate(function() {
28+
response.on('error', common.mustCall(function(err) {
29+
assert.strictEqual(err.message, 'HTTP/2 Stream has been closed');
30+
}));
31+
response.write('muahaha');
32+
server.close();
33+
});
34+
}));
35+
}));

0 commit comments

Comments
 (0)