transaction lock
authorecdsa <ecdsa@github>
Sun, 24 Mar 2013 06:34:28 +0000 (07:34 +0100)
committerecdsa <ecdsa@github>
Sun, 24 Mar 2013 06:34:28 +0000 (07:34 +0100)
lib/wallet.py

index eb7de88..c9eea98 100644 (file)
@@ -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