URI: 
       ttransaction lock - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 29b9ffac4a3c7d4b353559cd5e580879f0fb17c7
   DIR parent 3dc967782290198467b07088b7ec63dace3e6bf0
  HTML Author: ecdsa <ecdsa@github>
       Date:   Sun, 24 Mar 2013 07:34:28 +0100
       
       ttransaction lock
       
       Diffstat:
         M lib/wallet.py                       |      58 +++++++++++++++----------------
       
       1 file changed, 28 insertions(+), 30 deletions(-)
       ---
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -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:
       t@@ -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:
       t@@ -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()
        
       t@@ -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