@@ -3140,18 +3140,18 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
3140
3140
let mut session_priv_bytes = [ 0 ; 32 ] ;
3141
3141
session_priv_bytes. copy_from_slice ( & session_priv[ ..] ) ;
3142
3142
let mut outbounds = self . pending_outbound_payments . lock ( ) . unwrap ( ) ;
3143
- if let Some ( sessions ) = outbounds . get_mut ( & mpp_id ) {
3144
- if sessions. remove ( & session_priv_bytes ) {
3145
- self . pending_events . lock ( ) . unwrap ( ) . push (
3146
- events :: Event :: PaymentSent { payment_preimage }
3147
- ) ;
3148
- if sessions . len ( ) == 0 {
3149
- outbounds . remove ( & mpp_id ) ;
3143
+ let found_payment = loop {
3144
+ if let Some ( mut sessions) = outbounds . remove ( & mpp_id ) {
3145
+ if sessions . remove ( & session_priv_bytes ) {
3146
+ self . pending_events . lock ( ) . unwrap ( ) . push (
3147
+ events :: Event :: PaymentSent { payment_preimage }
3148
+ ) ;
3149
+ break true
3150
3150
}
3151
- } else {
3152
- log_trace ! ( self . logger, "Received duplicative fulfill for HTLC with payment_preimage {}" , log_bytes!( payment_preimage. 0 ) ) ;
3153
3151
}
3154
- } else {
3152
+ break false
3153
+ } ;
3154
+ if !found_payment {
3155
3155
log_trace ! ( self . logger, "Received duplicative fulfill for HTLC with payment_preimage {}" , log_bytes!( payment_preimage. 0 ) ) ;
3156
3156
}
3157
3157
} ,
@@ -5691,20 +5691,15 @@ mod tests {
5691
5691
nodes[ 0 ] . node . handle_revoke_and_ack ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_third_raa) ;
5692
5692
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
5693
5693
5694
- // There's an existing bug that generates a PaymentSent event for each MPP path, so handle that here.
5694
+ // Note that successful MPP payments will generate 1 event upon the first path's success. No
5695
+ // further events will be generated for subsequence path successes.
5695
5696
let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
5696
5697
match events[ 0 ] {
5697
5698
Event :: PaymentSent { payment_preimage : ref preimage } => {
5698
5699
assert_eq ! ( payment_preimage, * preimage) ;
5699
5700
} ,
5700
5701
_ => panic ! ( "Unexpected event" ) ,
5701
5702
}
5702
- match events[ 1 ] {
5703
- Event :: PaymentSent { payment_preimage : ref preimage } => {
5704
- assert_eq ! ( payment_preimage, * preimage) ;
5705
- } ,
5706
- _ => panic ! ( "Unexpected event" ) ,
5707
- }
5708
5703
}
5709
5704
5710
5705
#[ test]
0 commit comments