aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib/nonce-tracker.js
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2017-07-19 06:27:15 +0800
committerkumavis <aaron@kumavis.me>2017-07-19 06:27:15 +0800
commit12d6f2162791b421bd51313b0063e144b47ed868 (patch)
tree079d48fff6729abd6689a10badaf99bc36230220 /app/scripts/lib/nonce-tracker.js
parentaa48ed34c458874914c44400fb68885069625a6f (diff)
downloadtangerine-wallet-browser-12d6f2162791b421bd51313b0063e144b47ed868.tar
tangerine-wallet-browser-12d6f2162791b421bd51313b0063e144b47ed868.tar.gz
tangerine-wallet-browser-12d6f2162791b421bd51313b0063e144b47ed868.tar.bz2
tangerine-wallet-browser-12d6f2162791b421bd51313b0063e144b47ed868.tar.lz
tangerine-wallet-browser-12d6f2162791b421bd51313b0063e144b47ed868.tar.xz
tangerine-wallet-browser-12d6f2162791b421bd51313b0063e144b47ed868.tar.zst
tangerine-wallet-browser-12d6f2162791b421bd51313b0063e144b47ed868.zip
transactions - block nonce-tracker while updating pending transactions
Diffstat (limited to 'app/scripts/lib/nonce-tracker.js')
-rw-r--r--app/scripts/lib/nonce-tracker.js43
1 files changed, 29 insertions, 14 deletions
diff --git a/app/scripts/lib/nonce-tracker.js b/app/scripts/lib/nonce-tracker.js
index 7a450cb78..b76dac4e8 100644
--- a/app/scripts/lib/nonce-tracker.js
+++ b/app/scripts/lib/nonce-tracker.js
@@ -11,9 +11,18 @@ class NonceTracker {
this.lockMap = {}
}
+ async getGlobalLock () {
+ const globalMutex = this._lookupMutex('global')
+ // await global mutex free
+ const releaseLock = await globalMutex.acquire()
+ return { releaseLock }
+ }
+
// releaseLock must be called
// releaseLock must be called after adding signed tx to pending transactions (or discarding)
async getNonceLock (address) {
+ // await global mutex free
+ await this._globalMutexFree()
// await lock free, then take lock
const releaseLock = await this._takeMutex(address)
// calculate next nonce
@@ -40,13 +49,19 @@ class NonceTracker {
})
}
- _lookupMutex (lockId) {
- let mutex = this.lockMap[lockId]
- if (!mutex) {
- mutex = new Mutex()
- this.lockMap[lockId] = mutex
- }
- return mutex
+ async _getTxCount (address, currentBlock) {
+ const blockNumber = currentBlock.number
+ return new Promise((resolve, reject) => {
+ this.ethQuery.getTransactionCount(address, blockNumber, (err, result) => {
+ err ? reject(err) : resolve(result)
+ })
+ })
+ }
+
+ async _globalMutexFree () {
+ const globalMutex = this._lookupMutex('global')
+ const release = await globalMutex.acquire()
+ release()
}
async _takeMutex (lockId) {
@@ -55,13 +70,13 @@ class NonceTracker {
return releaseLock
}
- async _getTxCount (address, currentBlock) {
- const blockNumber = currentBlock.number
- return new Promise((resolve, reject) => {
- this.ethQuery.getTransactionCount(address, blockNumber, (err, result) => {
- err ? reject(err) : resolve(result)
- })
- })
+ _lookupMutex (lockId) {
+ let mutex = this.lockMap[lockId]
+ if (!mutex) {
+ mutex = new Mutex()
+ this.lockMap[lockId] = mutex
+ }
+ return mutex
}
}