tMerge pull request #3895 from SomberNight/fix_3890 - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit e0130cafcfc772951616808751bcb13231184182 DIR parent 14714899691c84291c642765310af95f3969323e HTML Author: ThomasV <thomasv@electrum.org> Date: Tue, 13 Feb 2018 09:52:16 +0100 Merge pull request #3895 from SomberNight/fix_3890 locking in wallet.create_new_address Diffstat: M lib/wallet.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) --- DIR diff --git a/lib/wallet.py b/lib/wallet.py t@@ -208,7 +208,7 @@ class Abstract_Wallet(PrintError): self.up_to_date = False # locks: if you need to take multiple ones, acquire them in the order they are defined here! - self.lock = threading.Lock() + self.lock = threading.RLock() self.transaction_lock = threading.RLock() self.check_history() t@@ -1947,15 +1947,16 @@ class Deterministic_Wallet(Abstract_Wallet): def create_new_address(self, for_change=False): assert type(for_change) is bool - addr_list = self.change_addresses if for_change else self.receiving_addresses - n = len(addr_list) - x = self.derive_pubkeys(for_change, n) - address = self.pubkeys_to_address(x) - addr_list.append(address) - self._addr_to_addr_index[address] = (for_change, n) - self.save_addresses() - self.add_address(address) - return address + with self.lock: + addr_list = self.change_addresses if for_change else self.receiving_addresses + n = len(addr_list) + x = self.derive_pubkeys(for_change, n) + address = self.pubkeys_to_address(x) + addr_list.append(address) + self._addr_to_addr_index[address] = (for_change, n) + self.save_addresses() + self.add_address(address) + return address def synchronize_sequence(self, for_change): limit = self.gap_limit_for_change if for_change else self.gap_limit