1
0

lnworker: fix threading issues for .channels attribute

external code (commands/gui) did not always take lock when iterating lnworker.channels.
instead of exposing lock, let's take a copy internally (as with .peers)
This commit is contained in:
SomberNight
2020-04-30 21:08:26 +02:00
parent f5eb91900a
commit b9b53e7f76
3 changed files with 43 additions and 44 deletions

View File

@@ -102,7 +102,7 @@ class MockLNWallet(Logger, NetworkRetryManager[LNPeerAddr]):
self.remote_keypair = remote_keypair
self.node_keypair = local_keypair
self.network = MockNetwork(tx_queue)
self.channels = {chan.channel_id: chan}
self._channels = {chan.channel_id: chan}
self.payments = {}
self.logs = defaultdict(list)
self.wallet = MockWallet()
@@ -122,6 +122,10 @@ class MockLNWallet(Logger, NetworkRetryManager[LNPeerAddr]):
def lock(self):
return noop_lock()
@property
def channels(self):
return self._channels
@property
def peers(self):
return self._peers
@@ -131,11 +135,11 @@ class MockLNWallet(Logger, NetworkRetryManager[LNPeerAddr]):
return {self.remote_keypair.pubkey: self.peer}
def channels_for_peer(self, pubkey):
return self.channels
return self._channels
def get_channel_by_short_id(self, short_channel_id):
with self.lock:
for chan in self.channels.values():
for chan in self._channels.values():
if chan.short_channel_id == short_channel_id:
return chan