From 305322382541acd2b8e1e8fd883024f75200d201 Mon Sep 17 00:00:00 2001 From: ZmnSCPxj jxPCSnmZ Date: Tue, 3 Nov 2020 11:26:00 +0800 Subject: [PATCH] Boss/Mod/ChannelFinderBy*: Only re-trigger if not already running. --- Boss/Mod/ChannelFinderByDistance.cpp | 9 ++++++++- Boss/Mod/ChannelFinderByDistance.hpp | 2 ++ Boss/Mod/ChannelFinderByListpays.cpp | 6 ++++++ Boss/Mod/ChannelFinderByListpays.hpp | 3 +++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Boss/Mod/ChannelFinderByDistance.cpp b/Boss/Mod/ChannelFinderByDistance.cpp index 0431e66b8..52e1f1b71 100644 --- a/Boss/Mod/ChannelFinderByDistance.cpp +++ b/Boss/Mod/ChannelFinderByDistance.cpp @@ -384,8 +384,15 @@ void ChannelFinderByDistance::start() { >([this](Msg::SolicitChannelCandidates const& _) { if (!rpc) return Ev::lift(); + if (running) + return Ev::lift(); + + running = true; auto run = Run::create(bus, *rpc, waiter, self_id); - return Boss::concurrent(run->run()); + return Boss::concurrent(run->run().then([this]() { + running = false; + return Ev::lift(); + })); }); } diff --git a/Boss/Mod/ChannelFinderByDistance.hpp b/Boss/Mod/ChannelFinderByDistance.hpp index 13bb4944d..f63cbe1b1 100644 --- a/Boss/Mod/ChannelFinderByDistance.hpp +++ b/Boss/Mod/ChannelFinderByDistance.hpp @@ -21,6 +21,7 @@ class ChannelFinderByDistance { Boss::Mod::Rpc* rpc; Boss::Mod::Waiter& waiter; Ln::NodeId self_id; + bool running; class Run; @@ -37,6 +38,7 @@ class ChannelFinderByDistance { ) : bus(bus_) , rpc(nullptr) , waiter(waiter_) + , running(false) { start(); } }; diff --git a/Boss/Mod/ChannelFinderByListpays.cpp b/Boss/Mod/ChannelFinderByListpays.cpp index ef6eb5a44..86df72033 100644 --- a/Boss/Mod/ChannelFinderByListpays.cpp +++ b/Boss/Mod/ChannelFinderByListpays.cpp @@ -48,7 +48,10 @@ void ChannelFinderByListpays::start() { >([this](Msg::SolicitChannelCandidates const& m) { if (!rpc) return Ev::lift(); + if (running) + return Ev::lift(); + running = true; auto act = rpc->command( "listpays", Json::Out::empty_object() ).then([this](Jsmn::Object res) { auto payees = std::map(); @@ -124,6 +127,9 @@ void ChannelFinderByListpays::start() { act += Ev::foreach(std::move(f), std::move(proposals)); return act; + }).then([this]() { + running = false; + return Ev::lift(); }); return Boss::concurrent(act); }); diff --git a/Boss/Mod/ChannelFinderByListpays.hpp b/Boss/Mod/ChannelFinderByListpays.hpp index 04ffb5739..250b7aa63 100644 --- a/Boss/Mod/ChannelFinderByListpays.hpp +++ b/Boss/Mod/ChannelFinderByListpays.hpp @@ -22,6 +22,8 @@ class ChannelFinderByListpays { /* Peers we already have channels with. */ std::set channels; + bool running; + void start(); public: @@ -33,6 +35,7 @@ class ChannelFinderByListpays { ChannelFinderByListpays( S::Bus& bus_ ) : bus(bus_) , rpc(nullptr) + , running(false) { start(); } };