Skip to content

Commit 99df17e

Browse files
Extract macro for new monitor upd, process actions later
Makes handle_new_monitor_update more readable. Also documents the variant and why someone may want to use it.
1 parent f0de03a commit 99df17e

File tree

1 file changed

+40
-30
lines changed

1 file changed

+40
-30
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3271,8 +3271,8 @@ macro_rules! locked_close_channel {
32713271
}};
32723272
($self: ident, $peer_state: expr, $funded_chan: expr, $shutdown_res_mut: expr, FUNDED) => {{
32733273
if let Some((_, funding_txo, _, update)) = $shutdown_res_mut.monitor_update.take() {
3274-
handle_new_monitor_update!($self, funding_txo, update, $peer_state,
3275-
$funded_chan.context, REMAIN_LOCKED_UPDATE_ACTIONS_PROCESSED_LATER);
3274+
handle_new_monitor_update_actions_deferred!($self, funding_txo, update, $peer_state,
3275+
$funded_chan.context);
32763276
}
32773277
// If there's a possibility that we need to generate further monitor updates for this
32783278
// channel, we need to store the last update_id of it. However, we don't want to insert
@@ -3713,6 +3713,42 @@ macro_rules! handle_post_close_monitor_update {
37133713
}};
37143714
}
37153715

3716+
/// Handles a new monitor update without dropping peer_state locks and calling
3717+
/// [`ChannelManager::handle_monitor_update_completion_actions`] if the monitor update completed
3718+
/// synchronously.
3719+
///
3720+
/// Useful because monitor updates need to be handled in the same mutex where the channel generated
3721+
/// them (otherwise they can end up getting applied out-of-order) but it's not always possible to
3722+
/// drop the aforementioned peer state locks at a given callsite. In this situation, use this macro
3723+
/// to apply the monitor update immediately and handle the monitor update completion actions at a
3724+
/// later time.
3725+
macro_rules! handle_new_monitor_update_actions_deferred {
3726+
(
3727+
$self: ident, $funding_txo: expr, $update: expr, $peer_state: expr, $chan_context: expr
3728+
) => {{
3729+
let logger = WithChannelContext::from(&$self.logger, &$chan_context, None);
3730+
let chan_id = $chan_context.channel_id();
3731+
let counterparty_node_id = $chan_context.get_counterparty_node_id();
3732+
let in_flight_updates;
3733+
let idx;
3734+
handle_new_monitor_update!(
3735+
$self,
3736+
$funding_txo,
3737+
$update,
3738+
$peer_state,
3739+
logger,
3740+
chan_id,
3741+
counterparty_node_id,
3742+
in_flight_updates,
3743+
idx,
3744+
_internal_outer,
3745+
{
3746+
let _ = in_flight_updates.remove(idx);
3747+
}
3748+
)
3749+
}};
3750+
}
3751+
37163752
macro_rules! handle_new_monitor_update {
37173753
(
37183754
$self: ident, $funding_txo: expr, $update: expr, $peer_state: expr, $logger: expr,
@@ -3762,31 +3798,6 @@ macro_rules! handle_new_monitor_update {
37623798
false
37633799
}
37643800
}};
3765-
(
3766-
$self: ident, $funding_txo: expr, $update: expr, $peer_state: expr, $chan_context: expr,
3767-
REMAIN_LOCKED_UPDATE_ACTIONS_PROCESSED_LATER
3768-
) => {{
3769-
let logger = WithChannelContext::from(&$self.logger, &$chan_context, None);
3770-
let chan_id = $chan_context.channel_id();
3771-
let counterparty_node_id = $chan_context.get_counterparty_node_id();
3772-
let in_flight_updates;
3773-
let idx;
3774-
handle_new_monitor_update!(
3775-
$self,
3776-
$funding_txo,
3777-
$update,
3778-
$peer_state,
3779-
logger,
3780-
chan_id,
3781-
counterparty_node_id,
3782-
in_flight_updates,
3783-
idx,
3784-
_internal_outer,
3785-
{
3786-
let _ = in_flight_updates.remove(idx);
3787-
}
3788-
)
3789-
}};
37903801
(
37913802
$self: ident, $funding_txo: expr, $update: expr, $peer_state_lock: expr, $peer_state: expr,
37923803
$per_peer_state_lock: expr, $chan: expr
@@ -14039,13 +14050,12 @@ where
1403914050
insert_short_channel_id!(short_to_chan_info, funded_channel);
1404014051

1404114052
if let Some(monitor_update) = monitor_update_opt {
14042-
handle_new_monitor_update!(
14053+
handle_new_monitor_update_actions_deferred!(
1404314054
self,
1404414055
funding_txo,
1404514056
monitor_update,
1404614057
peer_state,
14047-
funded_channel.context,
14048-
REMAIN_LOCKED_UPDATE_ACTIONS_PROCESSED_LATER
14058+
funded_channel.context
1404914059
);
1405014060
to_process_monitor_update_actions.push((
1405114061
counterparty_node_id, channel_id

0 commit comments

Comments
 (0)