Skip to content

Commit edf8f7d

Browse files
committed
f - Avoid cloning InitFeatures
1 parent 357ed9e commit edf8f7d

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,15 +1171,18 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
11711171
return Err(APIError::APIMisuseError { err: format!("Channel value must be at least 1000 satoshis. It was {}", channel_value_satoshis) });
11721172
}
11731173

1174-
let their_features = {
1174+
let channel = {
11751175
let per_peer_state = self.per_peer_state.read().unwrap();
11761176
match per_peer_state.get(&their_network_key) {
1177-
Some(peer_state) => peer_state.lock().unwrap().latest_features.clone(),
1177+
Some(peer_state) => {
1178+
let peer_state = peer_state.lock().unwrap();
1179+
let their_features = &peer_state.latest_features;
1180+
let config = if override_config.is_some() { override_config.as_ref().unwrap() } else { &self.default_configuration };
1181+
Channel::new_outbound(&self.fee_estimator, &self.keys_manager, their_network_key, their_features, channel_value_satoshis, push_msat, user_id, config)?
1182+
},
11781183
None => return Err(APIError::ChannelUnavailable { err: format!("Not connected to node: {}", their_network_key) }),
11791184
}
11801185
};
1181-
let config = if override_config.is_some() { override_config.as_ref().unwrap() } else { &self.default_configuration };
1182-
let channel = Channel::new_outbound(&self.fee_estimator, &self.keys_manager, their_network_key, &their_features, channel_value_satoshis, push_msat, user_id, config)?;
11831186
let res = channel.get_open_channel(self.genesis_hash.clone());
11841187

11851188
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
@@ -1281,14 +1284,15 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
12811284
match channel_state.by_id.entry(channel_id.clone()) {
12821285
hash_map::Entry::Occupied(mut chan_entry) => {
12831286
counterparty_node_id = chan_entry.get().get_counterparty_node_id();
1284-
let their_features = {
1285-
let per_peer_state = self.per_peer_state.read().unwrap();
1286-
match per_peer_state.get(&counterparty_node_id) {
1287-
Some(peer_state) => peer_state.lock().unwrap().latest_features.clone(),
1288-
None => return Err(APIError::ChannelUnavailable { err: format!("Not connected to node: {}", counterparty_node_id) }),
1289-
}
1287+
let per_peer_state = self.per_peer_state.read().unwrap();
1288+
let (shutdown_msg, monitor_update, htlcs) = match per_peer_state.get(&counterparty_node_id) {
1289+
Some(peer_state) => {
1290+
let peer_state = peer_state.lock().unwrap();
1291+
let their_features = &peer_state.latest_features;
1292+
chan_entry.get_mut().get_shutdown(&self.keys_manager, their_features)?
1293+
},
1294+
None => return Err(APIError::ChannelUnavailable { err: format!("Not connected to node: {}", counterparty_node_id) }),
12901295
};
1291-
let (shutdown_msg, monitor_update, htlcs) = chan_entry.get_mut().get_shutdown(&self.keys_manager, &their_features)?;
12921296
failed_htlcs = htlcs;
12931297

12941298
// Update the monitor with the shutdown script if necessary.

0 commit comments

Comments
 (0)