commit 29b9ffac4a3c7d4b353559cd5e580879f0fb17c7
parent 3dc967782290198467b07088b7ec63dace3e6bf0
Author: ecdsa <ecdsa@github>
Date: Sun, 24 Mar 2013 07:34:28 +0100
transaction lock
Diffstat:
M | lib/wallet.py | | | 58 | ++++++++++++++++++++++++++++------------------------------ |
1 file changed, 28 insertions(+), 30 deletions(-)
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -113,6 +113,7 @@ class Wallet:
self.up_to_date = False
self.lock = threading.Lock()
+ self.transaction_lock = threading.Lock()
self.tx_event = threading.Event()
if self.seed_version != SEED_VERSION:
@@ -432,8 +433,7 @@ class Wallet:
for item in tx.outputs:
addr, value = item
key = tx_hash+ ':%d'%i
- with self.lock:
- self.prevout_values[key] = value
+ self.prevout_values[key] = value
i += 1
for item in tx.inputs:
@@ -607,19 +607,17 @@ class Wallet:
def receive_tx_callback(self, tx_hash, tx, tx_height):
+
if not self.check_new_tx(tx_hash, tx):
# may happen due to pruning
print_error("received transaction that is no longer referenced in history", tx_hash)
return
- with self.lock:
+ with self.transaction_lock:
self.transactions[tx_hash] = tx
-
- #tx_height = tx.get('height')
- if self.verifier and tx_height>0:
- self.verifier.add(tx_hash, tx_height)
-
- self.update_tx_outputs(tx_hash)
+ if self.verifier and tx_height>0:
+ self.verifier.add(tx_hash, tx_height)
+ self.update_tx_outputs(tx_hash)
self.save()
@@ -641,29 +639,29 @@ class Wallet:
def get_tx_history(self):
- with self.lock:
+ with self.transaction_lock:
history = self.transactions.items()
- history.sort(key = lambda x: self.verifier.verified_tx.get(x[0]) if self.verifier.verified_tx.get(x[0]) else (1e12,0,0))
- result = []
+ history.sort(key = lambda x: self.verifier.verified_tx.get(x[0]) if self.verifier.verified_tx.get(x[0]) else (1e12,0,0))
+ result = []
- balance = 0
- for tx_hash, tx in history:
- is_mine, v, fee = self.get_tx_value(tx)
- if v is not None: balance += v
- c, u = self.get_balance()
-
- if balance != c+u:
- v_str = format_satoshis( c+u - balance, True, self.num_zeros)
- result.append( ('', 1000, 0, c+u-balance, None, c+u-balance, None ) )
-
- balance = c + u - balance
- for tx_hash, tx in history:
- conf, timestamp = self.verifier.get_confirmations(tx_hash) if self.verifier else (None, None)
- is_mine, value, fee = self.get_tx_value(tx)
- if value is not None:
- balance += value
-
- result.append( (tx_hash, conf, is_mine, value, fee, balance, timestamp) )
+ balance = 0
+ for tx_hash, tx in history:
+ is_mine, v, fee = self.get_tx_value(tx)
+ if v is not None: balance += v
+ c, u = self.get_balance()
+
+ if balance != c+u:
+ v_str = format_satoshis( c+u - balance, True, self.num_zeros)
+ result.append( ('', 1000, 0, c+u-balance, None, c+u-balance, None ) )
+
+ balance = c + u - balance
+ for tx_hash, tx in history:
+ conf, timestamp = self.verifier.get_confirmations(tx_hash) if self.verifier else (None, None)
+ is_mine, value, fee = self.get_tx_value(tx)
+ if value is not None:
+ balance += value
+
+ result.append( (tx_hash, conf, is_mine, value, fee, balance, timestamp) )
return result