@@ -6211,32 +6211,29 @@ where
6211
6211
for monitor_event in monitor_events.drain(..) {
6212
6212
match monitor_event {
6213
6213
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
+ }
6214
6229
if let Some(preimage) = htlc_update.payment_preimage {
6215
6230
log_trace!(self.logger, "Claiming HTLC with preimage {} from our monitor", log_bytes!(preimage.0));
6216
6231
self.claim_funds_internal(htlc_update.source, preimage, htlc_update.htlc_value_satoshis.map(|v| v * 1000), true, funding_outpoint.to_channel_id());
6217
6232
} 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);
6240
6237
}
6241
6238
},
6242
6239
MonitorEvent::CommitmentTxConfirmed(funding_outpoint) |
0 commit comments