From 786aed49ddd646d87a08cd24477efa791e93f538 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 6 Mar 2016 02:15:56 -0800 Subject: [PATCH] throw if async callback is executed twice. --- lib/bcoin/utils.js | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 81ebc8e8..03d2ebe9 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -1426,8 +1426,8 @@ utils.ccmp = function(a, b) { var res = 0; var i; - assert(Buffer.isBuffer(a)); - assert(Buffer.isBuffer(b)); + utils.assert(Buffer.isBuffer(a)); + utils.assert(Buffer.isBuffer(b)); if (a.length !== b.length) return false; @@ -1448,6 +1448,7 @@ utils.forRange = function forRange(from, to, iter, callback) { return callback(); function next(err) { + utils.assert(pending > 0); if (err) error = err; if (!--pending) @@ -1468,6 +1469,7 @@ utils.forEach = function forEach(arr, iter, callback) { return callback(); function next(err) { + utils.assert(pending > 0); if (err) error = err; if (!--pending) @@ -1480,13 +1482,20 @@ utils.forEach = function forEach(arr, iter, callback) { }; utils.forRangeSerial = function forRangeSerial(from, to, iter, callback) { + var called = false; + callback = utils.asyncify(callback); (function next(err) { - if (err) + utils.assert(!called); + if (err) { + called = true; return callback(err); - if (from >= to) + } + if (from >= to) { + called = true; return callback(); + } from++; utils.nextTick(function() { 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) { var i = 0; + var called = false; callback = utils.asyncify(callback); (function next(err) { var item; - if (err) + utils.assert(!called); + if (err) { + called = true; return callback(err); - if (i >= arr.length) + } + if (i >= arr.length) { + called = true; return callback(); + } item = arr[i]; i++; utils.nextTick(function() { @@ -1524,6 +1539,7 @@ utils.every = function every(arr, iter, callback) { return callback(null, result); function next(err, res) { + utils.assert(pending > 0); if (err) error = err; if (!res) @@ -1542,17 +1558,25 @@ utils.every = function every(arr, iter, callback) { utils.everySerial = function everySerial(arr, iter, callback) { var i = 0; + var called = false; callback = utils.asyncify(callback); (function next(err, res) { var item; - if (err) + utils.assert(!called); + if (err) { + called = true; return callback(err); - if (!result) + } + if (!result) { + called = true; return callback(null, false); - if (i >= arr.length) + } + if (i >= arr.length) { + called = true; return callback(null, true); + } item = arr[i]; i++; utils.nextTick(function() {