1
0

make wallet stop and restart-able

This commit is contained in:
ThomasV
2025-06-05 18:50:17 +02:00
parent 491b808cc5
commit 420cd1e5ed
2 changed files with 8 additions and 4 deletions

View File

@@ -218,6 +218,7 @@ class AddressSynchronizer(Logger, EventListener):
self.synchronizer = None
self.verifier = None
self.unregister_callbacks()
self.network = None
def add_address(self, address):
if address not in self.db.history:

View File

@@ -405,7 +405,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
self._default_labels = {}
self._accounting_addresses = set() # addresses counted as ours after successful sweep
self.taskgroup = OldTaskGroup()
self.taskgroup = None
# saved fields
self.use_change = db.get('use_change', True)
@@ -449,7 +449,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
self.lnworker = None
async def main_loop(self):
self.logger.info("starting taskgroup.")
self.logger.info(f"starting taskgroup ({hex(id(self.taskgroup))}).")
try:
async with self.taskgroup as group:
await group.spawn(asyncio.Event().wait) # run forever (until cancel)
@@ -547,8 +547,10 @@ class Abstract_Wallet(ABC, Logger, EventListener):
if self.lnworker:
await self.lnworker.stop()
self.lnworker = None
self.network = None
await self.taskgroup.cancel_remaining()
self.taskgroup = None
await self.adb.stop()
await self.taskgroup.cancel_remaining()
finally: # even if we get cancelled
if any([ks.is_requesting_to_be_rewritten_to_wallet_file for ks in self.get_keystores()]):
self.save_keystore()
@@ -556,7 +558,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
self.save_db()
def is_up_to_date(self) -> bool:
if self.taskgroup.joined: # either stop() was called, or the taskgroup died
if self.taskgroup and self.taskgroup.joined: # either stop() was called, or the taskgroup died
return False
return self._up_to_date
@@ -633,6 +635,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
def start_network(self, network: 'Network'):
assert self.network is None, "already started"
self.taskgroup = OldTaskGroup()
self.network = network
if network:
asyncio.run_coroutine_threadsafe(self.main_loop(), self.network.asyncio_loop)