From e3a6d7f35eb8f9635d69aaf795c0c619a118232e Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 16 Oct 2016 12:42:54 -0700 Subject: [PATCH] miner: workers and mining fixes. --- lib/http/rpc.js | 20 ++++++++++---------- lib/miner/miner.js | 8 ++++++++ lib/workers/workers.js | 12 ++++++------ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/lib/http/rpc.js b/lib/http/rpc.js index f4a34ea1..8f969ca2 100644 --- a/lib/http/rpc.js +++ b/lib/http/rpc.js @@ -1921,20 +1921,20 @@ RPC.prototype.getgenerate = function getgenerate(args) { return Promise.resolve(this.mining); }; -RPC.prototype.setgenerate = function setgenerate(args) { +RPC.prototype.setgenerate = co(function* setgenerate(args) { if (args.help || args.length < 1 || args.length > 2) - return Promise.reject(new RPCError('setgenerate mine ( proclimit )')); + throw new RPCError('setgenerate mine ( proclimit )'); this.mining = toBool(args[0]); this.proclimit = toNumber(args[1], 0); if (this.mining) - this.miner.start(); + this.miner.start().catch(utils.nop); else - this.miner.stop(); + yield this.miner.stop(); - return Promise.resolve(this.mining); -}; + return this.mining; +}); RPC.prototype.generate = co(function* generate(args) { var unlock = yield this.locker.lock(); @@ -2665,17 +2665,17 @@ RPC.prototype.reconsiderblock = function reconsiderblock(args) { }; RPC.prototype.setmocktime = function setmocktime(args) { - var time, delta; + var ts, delta; if (args.help || args.length !== 1) return Promise.reject(new RPCError('setmocktime timestamp')); - time = toNumber(args[0]); + ts = toNumber(args[0]); - if (time < 0) + if (ts < 0) return Promise.reject(new RPCError('Invalid parameter.')); - delta = time.now() - time; + delta = time.now() - ts; time.offset = -delta; return Promise.resolve(); diff --git a/lib/miner/miner.js b/lib/miner/miner.js index 8d67c14b..d409acaf 100644 --- a/lib/miner/miner.js +++ b/lib/miner/miner.js @@ -64,6 +64,14 @@ utils.inherits(Miner, AsyncObject); Miner.prototype._init = function _init() { var self = this; + this.chain.on('tip', function(tip) { + if (!self.attempt) + return; + + if (self.attempt.block.prevBlock !== tip.hash) + self.attempt.destroy(); + }); + this.on('block', function(block) { // Emit the block hex as a failsafe (in case we can't send it) self.logger.info('Found block: %d (%s).', block.height, block.rhash); diff --git a/lib/workers/workers.js b/lib/workers/workers.js index 86744667..5bf65ba8 100644 --- a/lib/workers/workers.js +++ b/lib/workers/workers.js @@ -871,19 +871,19 @@ if (utils.isBrowser) { } exports.set = function set(options) { - if (typeof options.useWorkerPool === 'boolean') - this.pool.enabled = options.useWorkerPool; + if (typeof options.useWorkers === 'boolean') + this.pool.enabled = options.useWorkers; - if (utils.isNumber(options.maxWorkerPool)) - this.pool.size = options.maxWorkerPool; + if (utils.isNumber(options.maxWorkers)) + this.pool.size = options.maxWorkers; if (utils.isNumber(options.workerTimeout)) this.pool.timeout = options.workerTimeout; }; exports.set({ - useWorkerPool: +process.env.BCOIN_USE_WORKERS === 1, - maxWorkerPool: +process.env.BCOIN_MAX_WORKERS, + useWorkers: +process.env.BCOIN_USE_WORKERS === 1, + maxWorkers: +process.env.BCOIN_MAX_WORKERS, workerTimeout: +process.env.BCOIN_WORKER_TIMEOUT });