Skip to content

Commit 2aad324

Browse files
committed
f - don't claim previously failed htlcs either
1 parent 5566e07 commit 2aad324

File tree

1 file changed

+19
-22
lines changed

1 file changed

+19
-22
lines changed

lightning/src/ln/channelmanager.rs

+19-22
Original file line numberDiff line numberDiff line change
@@ -6211,32 +6211,29 @@ where
62116211
for monitor_event in monitor_events.drain(..) {
62126212
match monitor_event {
62136213
MonitorEvent::HTLCEvent(htlc_update) => {
6214+
if let HTLCSource::PreviousHopData(HTLCPreviousHopData { htlc_id, ref short_channel_id, .. }) = htlc_update.source {
6215+
let counterparty_and_channel_id = self.short_to_chan_info.read().unwrap()
6216+
.get(short_channel_id).map(|v| v.clone());
6217+
if let Some((counterparty_node_id, channel_id)) = counterparty_and_channel_id {
6218+
let per_peer_state = self.per_peer_state.read().unwrap();
6219+
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id) {
6220+
if let Some(chan) = peer_state_mutex.lock().unwrap().channel_by_id.get(&channel_id) {
6221+
let already_failed = chan.check_inbound_htlc_failed(htlc_id).unwrap_or(true);
6222+
if already_failed {
6223+
continue;
6224+
}
6225+
}
6226+
}
6227+
}
6228+
}
62146229
if let Some(preimage) = htlc_update.payment_preimage {
62156230
log_trace!(self.logger, "Claiming HTLC with preimage {} from our monitor", log_bytes!(preimage.0));
62166231
self.claim_funds_internal(htlc_update.source, preimage, htlc_update.htlc_value_satoshis.map(|v| v * 1000), true, funding_outpoint.to_channel_id());
62176232
} else {
6218-
let mut already_failed = false;
6219-
if let HTLCSource::PreviousHopData(HTLCPreviousHopData { htlc_id, ref short_channel_id, .. }) = htlc_update.source {
6220-
let counterparty_and_channel_id = self.short_to_chan_info.read().unwrap()
6221-
.get(short_channel_id).map(|v| v.clone());
6222-
match counterparty_and_channel_id {
6223-
Some((counterparty_node_id, channel_id)) => {
6224-
let per_peer_state = self.per_peer_state.read().unwrap();
6225-
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id) {
6226-
if let Some(chan) = peer_state_mutex.lock().unwrap().channel_by_id.get(&channel_id) {
6227-
already_failed = chan.check_inbound_htlc_failed(htlc_id).unwrap_or(true);
6228-
}
6229-
}
6230-
},
6231-
None => {},
6232-
}
6233-
}
6234-
if !already_failed {
6235-
log_trace!(self.logger, "Failing HTLC with hash {} from our monitor", log_bytes!(htlc_update.payment_hash.0));
6236-
let receiver = HTLCDestination::NextHopChannel { node_id: counterparty_node_id, channel_id: funding_outpoint.to_channel_id() };
6237-
let reason = HTLCFailReason::from_failure_code(0x4000 | 8);
6238-
self.fail_htlc_backwards_internal(&htlc_update.source, &htlc_update.payment_hash, &reason, receiver);
6239-
}
6233+
log_trace!(self.logger, "Failing HTLC with hash {} from our monitor", log_bytes!(htlc_update.payment_hash.0));
6234+
let receiver = HTLCDestination::NextHopChannel { node_id: counterparty_node_id, channel_id: funding_outpoint.to_channel_id() };
6235+
let reason = HTLCFailReason::from_failure_code(0x4000 | 8);
6236+
self.fail_htlc_backwards_internal(&htlc_update.source, &htlc_update.payment_hash, &reason, receiver);
62406237
}
62416238
},
62426239
MonitorEvent::CommitmentTxConfirmed(funding_outpoint) |

0 commit comments

Comments
 (0)