From 3a75b3823290a36ec47135594c4713be3dfd4994 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Tue, 31 Oct 2017 20:13:37 -0300 Subject: [PATCH] add lock --- lib/server.js | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/server.js b/lib/server.js index a9f5fee..d821384 100644 --- a/lib/server.js +++ b/lib/server.js @@ -1277,21 +1277,24 @@ WalletService.prototype._getBalanceFromAddresses = function(opts, cb) { WalletService.prototype._getBalanceOneStep = function(opts, cb) { var self = this; - self.storage.fetchAddresses(self.walletId, function(err, addresses) { - if (err) return cb(err); - self._getBalanceFromAddresses({ - coin: opts.coin, - addresses: addresses - }, function(err, balance) { + // This lock is to prevent server starvation on big wallets + self._runLocked(cb, function(cb) { + self.storage.fetchAddresses(self.walletId, function(err, addresses) { if (err) return cb(err); + self._getBalanceFromAddresses({ + coin: opts.coin, + addresses: addresses + }, function(err, balance) { + if (err) return cb(err); - // Update cache - var withBalance = _.map(balance.byAddress, 'address') - self.storage.storeAddressesWithBalance(self.walletId, withBalance, function(err) { - if (err) { - log.warn('Could not update wallet cache', err); - } - return cb(null, balance); + // Update cache + var withBalance = _.map(balance.byAddress, 'address') + self.storage.storeAddressesWithBalance(self.walletId, withBalance, function(err) { + if (err) { + log.warn('Could not update wallet cache', err); + } + return cb(null, balance); + }); }); }); });