Browse Source

lnpeer: add note about thread-safety, and some checks

I was calling methods from the Qt console (e.g. peer.pay()) and seeing weird behaviour...
htlc_switch() (running on asyncio thread) was racing with pay() (running on GUI thread).
master
SomberNight 3 years ago
parent
commit
046609c5d2
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 4
      electrum/lnpeer.py

4
electrum/lnpeer.py

@ -63,6 +63,8 @@ LN_P2P_NETWORK_TIMEOUT = 20
class Peer(Logger):
# note: in general this class is NOT thread-safe. Most methods are assumed to be running on asyncio thread.
LOGGING_SHORTCUT = 'P'
ORDERED_MESSAGES = (
@ -120,6 +122,7 @@ class Peer(Logger):
self.downstream_htlc_resolved_event = asyncio.Event()
def send_message(self, message_name: str, **kwargs):
assert util.get_running_loop() == util.get_asyncio_loop(), f"this must be run on the asyncio thread!"
assert type(message_name) is str
if message_name not in self.SPAMMY_MESSAGES:
self.logger.debug(f"Sending {message_name.upper()}")
@ -1421,6 +1424,7 @@ class Peer(Logger):
self.maybe_send_commitment(chan)
def maybe_send_commitment(self, chan: Channel) -> bool:
assert util.get_running_loop() == util.get_asyncio_loop(), f"this must be run on the asyncio thread!"
# REMOTE should revoke first before we can sign a new ctx
if chan.hm.is_revack_pending(REMOTE):
return False

Loading…
Cancel
Save