Skip to content

Commit deac317

Browse files
committed
Simplify channelmanager handle_error via map_err
1 parent 040ce2a commit deac317

File tree

1 file changed

+46
-48
lines changed

1 file changed

+46
-48
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 46 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3968,6 +3968,7 @@ where
39683968
}
39693969
}
39703970

3971+
/// Handles an error by closing the channel if required and generating peer messages.
39713972
fn handle_error<A>(
39723973
&self, internal: Result<A, MsgHandleErrInternal>, counterparty_node_id: PublicKey,
39733974
) -> Result<A, LightningError> {
@@ -3976,64 +3977,61 @@ where
39763977
debug_assert_ne!(self.pending_events.held_by_thread(), LockHeldState::HeldByThread);
39773978
debug_assert_ne!(self.per_peer_state.held_by_thread(), LockHeldState::HeldByThread);
39783979

3979-
match internal {
3980-
Ok(msg) => Ok(msg),
3981-
Err(MsgHandleErrInternal { err, shutdown_finish, tx_abort, .. }) => {
3982-
let mut msg_event = None;
3980+
internal.map_err(|err_internal| {
3981+
let mut msg_event = None;
39833982

3984-
if let Some((shutdown_res, update_option)) = shutdown_finish {
3985-
let counterparty_node_id = shutdown_res.counterparty_node_id;
3986-
let channel_id = shutdown_res.channel_id;
3987-
let logger = WithContext::from(
3988-
&self.logger,
3989-
Some(counterparty_node_id),
3990-
Some(channel_id),
3991-
None,
3992-
);
3993-
log_error!(logger, "Closing channel: {}", err.err);
3994-
3995-
self.finish_close_channel(shutdown_res);
3996-
if let Some((update, node_id_1, node_id_2)) = update_option {
3997-
let mut pending_broadcast_messages =
3998-
self.pending_broadcast_messages.lock().unwrap();
3999-
pending_broadcast_messages.push(MessageSendEvent::BroadcastChannelUpdate {
4000-
msg: update,
4001-
node_id_1,
4002-
node_id_2,
4003-
});
4004-
}
4005-
} else {
4006-
log_error!(self.logger, "Got non-closing error: {}", err.err);
3983+
if let Some((shutdown_res, update_option)) = err_internal.shutdown_finish {
3984+
let counterparty_node_id = shutdown_res.counterparty_node_id;
3985+
let channel_id = shutdown_res.channel_id;
3986+
let logger = WithContext::from(
3987+
&self.logger,
3988+
Some(counterparty_node_id),
3989+
Some(channel_id),
3990+
None,
3991+
);
3992+
log_error!(logger, "Closing channel: {}", err_internal.err.err);
3993+
3994+
self.finish_close_channel(shutdown_res);
3995+
if let Some((update, node_id_1, node_id_2)) = update_option {
3996+
let mut pending_broadcast_messages =
3997+
self.pending_broadcast_messages.lock().unwrap();
3998+
pending_broadcast_messages.push(MessageSendEvent::BroadcastChannelUpdate {
3999+
msg: update,
4000+
node_id_1,
4001+
node_id_2,
4002+
});
40074003
}
4004+
} else {
4005+
log_error!(self.logger, "Got non-closing error: {}", err_internal.err.err);
4006+
}
40084007

4009-
if let msgs::ErrorAction::IgnoreError = err.action {
4010-
if let Some(tx_abort) = tx_abort {
4011-
msg_event = Some(MessageSendEvent::SendTxAbort {
4012-
node_id: counterparty_node_id,
4013-
msg: tx_abort,
4014-
});
4015-
}
4016-
} else {
4017-
msg_event = Some(MessageSendEvent::HandleError {
4008+
if let msgs::ErrorAction::IgnoreError = err_internal.err.action {
4009+
if let Some(tx_abort) = err_internal.tx_abort {
4010+
msg_event = Some(MessageSendEvent::SendTxAbort {
40184011
node_id: counterparty_node_id,
4019-
action: err.action.clone(),
4012+
msg: tx_abort,
40204013
});
40214014
}
4015+
} else {
4016+
msg_event = Some(MessageSendEvent::HandleError {
4017+
node_id: counterparty_node_id,
4018+
action: err_internal.err.action.clone(),
4019+
});
4020+
}
40224021

4023-
if let Some(msg_event) = msg_event {
4024-
let per_peer_state = self.per_peer_state.read().unwrap();
4025-
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id) {
4026-
let mut peer_state = peer_state_mutex.lock().unwrap();
4027-
if peer_state.is_connected {
4028-
peer_state.pending_msg_events.push(msg_event);
4029-
}
4022+
if let Some(msg_event) = msg_event {
4023+
let per_peer_state = self.per_peer_state.read().unwrap();
4024+
if let Some(peer_state_mutex) = per_peer_state.get(&counterparty_node_id) {
4025+
let mut peer_state = peer_state_mutex.lock().unwrap();
4026+
if peer_state.is_connected {
4027+
peer_state.pending_msg_events.push(msg_event);
40304028
}
40314029
}
4030+
}
40324031

4033-
// Return error in case higher-API need one
4034-
Err(err)
4035-
},
4036-
}
4032+
// Return error in case higher-API need one
4033+
err_internal.err
4034+
})
40374035
}
40384036

40394037
/// Gets the current [`UserConfig`] which controls some global behavior and includes the

0 commit comments

Comments
 (0)