From 16c66558924f9fdf188f8fe03008d3440014d4a7 Mon Sep 17 00:00:00 2001 From: SomberNight <somber.night@protonmail.com> Date: Thu, 4 Nov 2021 16:32:40 +0100 Subject: [PATCH] lnpeer: make forwarding partly event-driven --- electrum/lnpeer.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py index b91de4071..584df8393 100644 --- a/electrum/lnpeer.py +++ b/electrum/lnpeer.py @@ -14,7 +14,7 @@ from datetime import datetime import functools import aiorpcx -from aiorpcx import TaskGroup +from aiorpcx import TaskGroup, ignore_after from .crypto import sha256, sha256d from . import bitcoin, util @@ -109,6 +109,7 @@ class Peer(Logger): self.received_htlc_removed_event = asyncio.Event() self._htlc_switch_iterstart_event = asyncio.Event() self._htlc_switch_iterdone_event = asyncio.Event() + self._received_revack_event = asyncio.Event() def send_message(self, message_name: str, **kwargs): assert type(message_name) is str @@ -1629,6 +1630,8 @@ class Peer(Logger): chan.receive_revocation(rev) self.lnworker.save_channel(chan) self.maybe_send_commitment(chan) + self._received_revack_event.set() + self._received_revack_event.clear() def on_update_fee(self, chan: Channel, payload): feerate = payload["feerate_per_kw"] @@ -1836,7 +1839,12 @@ class Peer(Logger): while True: self._htlc_switch_iterdone_event.set() self._htlc_switch_iterdone_event.clear() - await asyncio.sleep(0.1) # TODO maybe make this partly event-driven + # We poll every 0.1 sec to check if there is work to do, + # or we can be woken up when receiving a revack. + # TODO when forwarding, we should also be woken up when there are + # certain events with the downstream peer + async with ignore_after(0.1): + await self._received_revack_event.wait() self._htlc_switch_iterstart_event.set() self._htlc_switch_iterstart_event.clear() self.ping_if_required()