diff --git a/build/files.js b/build/files.js
index 81f075c70b..ec2399e9b5 100644
--- a/build/files.js
+++ b/build/files.js
@@ -180,11 +180,12 @@ const headRegexp = /(^module.exports = \w+;?)/m
/(?:var|const) Buffer = require\('buffer'\)\.Buffer;/
, `/**/
const Buffer = require('safe-buffer').Buffer
+ const OurUint8Array = global.Uint8Array || function () {}
function _uint8ArrayToBuffer(chunk) {
return Buffer.from(chunk);
}
function _isUint8Array(obj) {
- return Object.prototype.toString.call(obj) === '[object Uint8Array]' || Buffer.isBuffer(obj);
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}
/**/
`
diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
index 2279be9f93..ea9f8b8531 100644
--- a/lib/_stream_readable.js
+++ b/lib/_stream_readable.js
@@ -54,11 +54,12 @@ var Stream = require('./internal/streams/stream');
// properly optimized away early in Ignition+TurboFan.
/**/
var Buffer = require('safe-buffer').Buffer;
+var OurUint8Array = global.Uint8Array || function () {};
function _uint8ArrayToBuffer(chunk) {
return Buffer.from(chunk);
}
function _isUint8Array(obj) {
- return Object.prototype.toString.call(obj) === '[object Uint8Array]' || Buffer.isBuffer(obj);
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}
/**/
diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
index ad38c6aa8d..72630a6585 100644
--- a/lib/_stream_writable.js
+++ b/lib/_stream_writable.js
@@ -80,11 +80,12 @@ var Stream = require('./internal/streams/stream');
/**/
var Buffer = require('safe-buffer').Buffer;
+var OurUint8Array = global.Uint8Array || function () {};
function _uint8ArrayToBuffer(chunk) {
return Buffer.from(chunk);
}
function _isUint8Array(obj) {
- return Object.prototype.toString.call(obj) === '[object Uint8Array]' || Buffer.isBuffer(obj);
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}
/**/
@@ -408,26 +409,15 @@ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
function onwriteError(stream, state, sync, er, cb) {
--state.pendingcb;
+ if (sync) processNextTick(afterError, stream, state, cb, er);else afterError(stream, state, cb, er);
- if (sync) {
- // defer the callback if we are being called synchronously
- // to avoid piling up things on the stack
- processNextTick(cb, er);
- // this can emit finish, and it will always happen
- // after error
- processNextTick(finishMaybe, stream, state);
- stream._writableState.errorEmitted = true;
- stream.emit('error', er);
- } else {
- // the caller expect this to happen before if
- // it is async
- cb(er);
- stream._writableState.errorEmitted = true;
- stream.emit('error', er);
- // this can emit finish, but finish must
- // always follow error
- finishMaybe(stream, state);
- }
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+}
+
+function afterError(stream, state, cb, err) {
+ cb(err);
+ finishMaybe(stream, state);
}
function onwriteStateUpdate(state) {
@@ -660,4 +650,4 @@ Writable.prototype._undestroy = destroyImpl.undestroy;
Writable.prototype._destroy = function (err, cb) {
this.end();
cb(err);
-};
+};
\ No newline at end of file