From 778d2ae50e4493980916c03ce120e1f2a6842c79 Mon Sep 17 00:00:00 2001 From: Valentine Wallace Date: Thu, 19 Aug 2021 20:44:45 -0400 Subject: [PATCH] Prevent duplicate PaymentSent events by removing all pending outbound payments associated with the same MPP payment after the preimage is received --- lightning/src/ln/channelmanager.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index ac8917c49d0..fda47a7438e 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -2978,6 +2978,9 @@ impl ChannelMana pending_events.push(events::Event::PaymentSent { payment_preimage }); + self.pending_outbound_payments.lock().unwrap().retain(|p| { + mpp_id.is_none() || (mpp_id.is_some() && mpp_id == p.1) + }); } else { log_trace!(self.logger, "Received duplicative fulfill for HTLC with payment_preimage {}", log_bytes!(payment_preimage.0)); } @@ -5491,7 +5494,6 @@ mod tests { nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_third_raa); check_added_monitors!(nodes[0], 1); - // There's an existing bug that generates a PaymentSent event for each MPP path, so handle that here. let events = nodes[0].node.get_and_clear_pending_events(); match events[0] { Event::PaymentSent { payment_preimage: ref preimage } => { @@ -5499,12 +5501,6 @@ mod tests { }, _ => panic!("Unexpected event"), } - match events[1] { - Event::PaymentSent { payment_preimage: ref preimage } => { - assert_eq!(payment_preimage, *preimage); - }, - _ => panic!("Unexpected event"), - } } #[test]