Permalink
Browse files

doc: fix onReadable reentry after unshift called

In example parseHeader, stream listen **readable** event,
if call stream.unshift(buf) before stream.removeListener('readable',
onReadable), readable event will be emited before removeListener,
so callback will not been called correctlly.
After change to
```js
stream.removeListener('error', callback);
stream.removeListener('readable', onReadable);
if (buf.length)
stream.unshift(buf);
```
It solves this problem.

PR-URL: #8200
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information...
Zwb authored and Fishrock123 committed Aug 21, 2016
1 parent 5cff625 commit b6f51041453b18d74fb699445a0ec070417fab4a
Showing with 3 additions and 2 deletions.
  1. +3 −2 doc/api/stream.md
View
@@ -963,10 +963,11 @@ function parseHeader(stream, callback) {
header += split.shift();
const remaining = split.join('\n\n');
const buf = Buffer.from(remaining, 'utf8');
if (buf.length)
stream.unshift(buf);
stream.removeListener('error', callback);
// set the readable listener before unshifting
stream.removeListener('readable', onReadable);
if (buf.length)
stream.unshift(buf);
// now the body of the message can be read from the stream.
callback(null, header, stream);
} else {

0 comments on commit b6f5104

Please sign in to comment.