From b6f51041453b18d74fb699445a0ec070417fab4a Mon Sep 17 00:00:00 2001 From: Zwb Date: Sun, 21 Aug 2016 10:07:10 +0800 Subject: [PATCH] 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: https://github.com/nodejs/node/pull/8200 Reviewed-By: Matteo Collina Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- doc/api/stream.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/api/stream.md b/doc/api/stream.md index 72baca9c4a..70a2762399 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -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 {