commit 478bde8afab6c8670103126245ab49e5977f1b1e
parent b7555240efd78ba437764ea9519df36c54aa651d
Author: Neil Booth <kyuupichan@gmail.com>
Date: Fri, 28 Aug 2015 11:10:50 +0900
Access to unverified_tx no longer needs a lock
Once the proxy thread jobs are created only they access this,
and they all run under the proxy thread, so there is no contention.
Diffstat:
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -171,7 +171,8 @@ class Abstract_Wallet(object):
# spv
self.verifier = None
- # Transactions pending verification. Each value is the transaction height. Access with self.lock.
+ # Transactions pending verification. A map from tx hash to transaction
+ # height. Access is not contended so no lock is needed.
self.unverified_tx = {}
# Verified transactions. Each value is a (height, timestamp, block_pos) tuple. Access with self.lock.
self.verified_tx = storage.get('verified_tx3',{})
@@ -417,8 +418,7 @@ class Abstract_Wallet(object):
def add_unverified_tx(self, tx_hash, tx_height):
if tx_height > 0:
- with self.lock:
- self.unverified_tx[tx_hash] = tx_height
+ self.unverified_tx[tx_hash] = tx_height
def add_verified_tx(self, tx_hash, info):
with self.lock:
@@ -429,13 +429,13 @@ class Abstract_Wallet(object):
self.network.trigger_callback('verified', (tx_hash, conf, timestamp))
def get_unverified_txs(self):
- '''Returns a list of tuples (tx_hash, height) that are unverified and not beyond local height'''
+ '''Returns a list of tuples (tx_hash, height) that are unverified
+ and not beyond local height'''
txs = []
- with self.lock:
- for tx_hash, tx_height in self.unverified_tx.items():
- # do not request merkle branch before headers are available
- if tx_hash not in self.verified_tx and tx_height <= self.get_local_height():
- txs.append((tx_hash, tx_height))
+ for tx_hash, tx_height in self.unverified_tx.items():
+ # do not request merkle branch before headers are available
+ if tx_hash not in self.verified_tx and tx_height <= self.get_local_height():
+ txs.append((tx_hash, tx_height))
return txs
def undo_verifications(self, height):
@@ -473,7 +473,7 @@ class Abstract_Wallet(object):
"return position, even if the tx is unverified"
with self.lock:
x = self.verified_tx.get(tx_hash)
- y = self.unverified_tx.get(tx_hash)
+ y = self.unverified_tx.get(tx_hash)
if x:
height, timestamp, pos = x
return height, pos