make wallet stop and restart-able
This commit is contained in:
@@ -218,6 +218,7 @@ class AddressSynchronizer(Logger, EventListener):
|
|||||||
self.synchronizer = None
|
self.synchronizer = None
|
||||||
self.verifier = None
|
self.verifier = None
|
||||||
self.unregister_callbacks()
|
self.unregister_callbacks()
|
||||||
|
self.network = None
|
||||||
|
|
||||||
def add_address(self, address):
|
def add_address(self, address):
|
||||||
if address not in self.db.history:
|
if address not in self.db.history:
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
self._default_labels = {}
|
self._default_labels = {}
|
||||||
self._accounting_addresses = set() # addresses counted as ours after successful sweep
|
self._accounting_addresses = set() # addresses counted as ours after successful sweep
|
||||||
|
|
||||||
self.taskgroup = OldTaskGroup()
|
self.taskgroup = None
|
||||||
|
|
||||||
# saved fields
|
# saved fields
|
||||||
self.use_change = db.get('use_change', True)
|
self.use_change = db.get('use_change', True)
|
||||||
@@ -449,7 +449,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
self.lnworker = None
|
self.lnworker = None
|
||||||
|
|
||||||
async def main_loop(self):
|
async def main_loop(self):
|
||||||
self.logger.info("starting taskgroup.")
|
self.logger.info(f"starting taskgroup ({hex(id(self.taskgroup))}).")
|
||||||
try:
|
try:
|
||||||
async with self.taskgroup as group:
|
async with self.taskgroup as group:
|
||||||
await group.spawn(asyncio.Event().wait) # run forever (until cancel)
|
await group.spawn(asyncio.Event().wait) # run forever (until cancel)
|
||||||
@@ -547,8 +547,10 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
if self.lnworker:
|
if self.lnworker:
|
||||||
await self.lnworker.stop()
|
await self.lnworker.stop()
|
||||||
self.lnworker = None
|
self.lnworker = None
|
||||||
|
self.network = None
|
||||||
|
await self.taskgroup.cancel_remaining()
|
||||||
|
self.taskgroup = None
|
||||||
await self.adb.stop()
|
await self.adb.stop()
|
||||||
await self.taskgroup.cancel_remaining()
|
|
||||||
finally: # even if we get cancelled
|
finally: # even if we get cancelled
|
||||||
if any([ks.is_requesting_to_be_rewritten_to_wallet_file for ks in self.get_keystores()]):
|
if any([ks.is_requesting_to_be_rewritten_to_wallet_file for ks in self.get_keystores()]):
|
||||||
self.save_keystore()
|
self.save_keystore()
|
||||||
@@ -556,7 +558,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
self.save_db()
|
self.save_db()
|
||||||
|
|
||||||
def is_up_to_date(self) -> bool:
|
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 False
|
||||||
return self._up_to_date
|
return self._up_to_date
|
||||||
|
|
||||||
@@ -633,6 +635,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
|
|
||||||
def start_network(self, network: 'Network'):
|
def start_network(self, network: 'Network'):
|
||||||
assert self.network is None, "already started"
|
assert self.network is None, "already started"
|
||||||
|
self.taskgroup = OldTaskGroup()
|
||||||
self.network = network
|
self.network = network
|
||||||
if network:
|
if network:
|
||||||
asyncio.run_coroutine_threadsafe(self.main_loop(), self.network.asyncio_loop)
|
asyncio.run_coroutine_threadsafe(self.main_loop(), self.network.asyncio_loop)
|
||||||
|
|||||||
Reference in New Issue
Block a user