throw if async callback is executed twice.

This commit is contained in:
Christopher Jeffrey 2016-03-06 02:15:56 -08:00
parent 99f927665a
commit 786aed49dd

View File

@ -1426,8 +1426,8 @@ utils.ccmp = function(a, b) {
var res = 0; var res = 0;
var i; var i;
assert(Buffer.isBuffer(a)); utils.assert(Buffer.isBuffer(a));
assert(Buffer.isBuffer(b)); utils.assert(Buffer.isBuffer(b));
if (a.length !== b.length) if (a.length !== b.length)
return false; return false;
@ -1448,6 +1448,7 @@ utils.forRange = function forRange(from, to, iter, callback) {
return callback(); return callback();
function next(err) { function next(err) {
utils.assert(pending > 0);
if (err) if (err)
error = err; error = err;
if (!--pending) if (!--pending)
@ -1468,6 +1469,7 @@ utils.forEach = function forEach(arr, iter, callback) {
return callback(); return callback();
function next(err) { function next(err) {
utils.assert(pending > 0);
if (err) if (err)
error = err; error = err;
if (!--pending) if (!--pending)
@ -1480,13 +1482,20 @@ utils.forEach = function forEach(arr, iter, callback) {
}; };
utils.forRangeSerial = function forRangeSerial(from, to, iter, callback) { utils.forRangeSerial = function forRangeSerial(from, to, iter, callback) {
var called = false;
callback = utils.asyncify(callback); callback = utils.asyncify(callback);
(function next(err) { (function next(err) {
if (err) utils.assert(!called);
if (err) {
called = true;
return callback(err); return callback(err);
if (from >= to) }
if (from >= to) {
called = true;
return callback(); return callback();
}
from++; from++;
utils.nextTick(function() { utils.nextTick(function() {
iter(from - 1, next, from - 1); iter(from - 1, next, from - 1);
@ -1496,15 +1505,21 @@ utils.forRangeSerial = function forRangeSerial(from, to, iter, callback) {
utils.forEachSerial = function forEachSerial(arr, iter, callback) { utils.forEachSerial = function forEachSerial(arr, iter, callback) {
var i = 0; var i = 0;
var called = false;
callback = utils.asyncify(callback); callback = utils.asyncify(callback);
(function next(err) { (function next(err) {
var item; var item;
if (err) utils.assert(!called);
if (err) {
called = true;
return callback(err); return callback(err);
if (i >= arr.length) }
if (i >= arr.length) {
called = true;
return callback(); return callback();
}
item = arr[i]; item = arr[i];
i++; i++;
utils.nextTick(function() { utils.nextTick(function() {
@ -1524,6 +1539,7 @@ utils.every = function every(arr, iter, callback) {
return callback(null, result); return callback(null, result);
function next(err, res) { function next(err, res) {
utils.assert(pending > 0);
if (err) if (err)
error = err; error = err;
if (!res) if (!res)
@ -1542,17 +1558,25 @@ utils.every = function every(arr, iter, callback) {
utils.everySerial = function everySerial(arr, iter, callback) { utils.everySerial = function everySerial(arr, iter, callback) {
var i = 0; var i = 0;
var called = false;
callback = utils.asyncify(callback); callback = utils.asyncify(callback);
(function next(err, res) { (function next(err, res) {
var item; var item;
if (err) utils.assert(!called);
if (err) {
called = true;
return callback(err); return callback(err);
if (!result) }
if (!result) {
called = true;
return callback(null, false); return callback(null, false);
if (i >= arr.length) }
if (i >= arr.length) {
called = true;
return callback(null, true); return callback(null, true);
}
item = arr[i]; item = arr[i];
i++; i++;
utils.nextTick(function() { utils.nextTick(function() {