Skip to content

Commit 85d1247

Browse files
committed
f drop lock
1 parent dcf9940 commit 85d1247

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4406,6 +4406,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
44064406
let chan_id = prev_hop.outpoint.to_channel_id();
44074407
let channel_state = &mut *channel_state_lock;
44084408
if let hash_map::Entry::Occupied(mut chan) = channel_state.by_id.entry(chan_id) {
4409+
let counterparty_node_id = chan.get().get_counterparty_node_id();
44094410
match chan.get_mut().get_update_fulfill_htlc_and_commit(prev_hop.htlc_id, payment_preimage, &self.logger) {
44104411
Ok(msgs_monitor_option) => {
44114412
if let UpdateFulfillCommitFetch::NewClaim { msgs, htlc_value_msat, monitor_update } = msgs_monitor_option {
@@ -4415,11 +4416,11 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
44154416
log_given_level!(self.logger, if e == ChannelMonitorUpdateStatus::PermanentFailure { Level::Error } else { Level::Debug },
44164417
"Failed to update channel monitor with preimage {:?}: {:?}",
44174418
payment_preimage, e);
4419+
let err = handle_monitor_update_res!(self, e, chan, RAACommitmentOrder::CommitmentFirst, false, msgs.is_some()).unwrap_err();
4420+
mem::drop(channel_state_lock);
44184421
self.handle_monitor_update_completion_actions(completion_action(Some(htlc_value_msat)));
44194422
return ClaimFundsFromHop::MonitorUpdateFail(
4420-
chan.get().get_counterparty_node_id(),
4421-
handle_monitor_update_res!(self, e, chan, RAACommitmentOrder::CommitmentFirst, false, msgs.is_some()).unwrap_err(),
4422-
Some(htlc_value_msat)
4423+
counterparty_node_id, err, Some(htlc_value_msat)
44234424
);
44244425
}
44254426
}
@@ -4438,6 +4439,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
44384439
}
44394440
});
44404441
}
4442+
mem::drop(channel_state_lock);
44414443
self.handle_monitor_update_completion_actions(completion_action(Some(htlc_value_msat)));
44424444
return ClaimFundsFromHop::Success(htlc_value_msat);
44434445
} else {
@@ -4453,11 +4455,11 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
44534455
payment_preimage, e);
44544456
},
44554457
}
4456-
let counterparty_node_id = chan.get().get_counterparty_node_id();
44574458
let (drop, res) = convert_chan_err!(self, e, chan.get_mut(), &chan_id);
44584459
if drop {
44594460
chan.remove_entry();
44604461
}
4462+
mem::drop(channel_state_lock);
44614463
self.handle_monitor_update_completion_actions(completion_action(None));
44624464
return ClaimFundsFromHop::MonitorUpdateFail(counterparty_node_id, res, None);
44634465
},
@@ -4480,6 +4482,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
44804482
log_error!(self.logger, "Critical error: failed to update channel monitor with preimage {:?}: {:?}",
44814483
payment_preimage, update_res);
44824484
}
4485+
mem::drop(channel_state_lock);
44834486
// Note that we do process the completion action here. This totally could be a
44844487
// duplicate claim, but we have no way of knowing without interrogating the
44854488
// `ChannelMonitor` we've provided the above update to. Instead, note that `Event`s are

0 commit comments

Comments
 (0)