@@ -1171,15 +1171,18 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1171
1171
return Err ( APIError :: APIMisuseError { err : format ! ( "Channel value must be at least 1000 satoshis. It was {}" , channel_value_satoshis) } ) ;
1172
1172
}
1173
1173
1174
- let their_features = {
1174
+ let channel = {
1175
1175
let per_peer_state = self . per_peer_state . read ( ) . unwrap ( ) ;
1176
1176
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
+ } ,
1178
1183
None => return Err ( APIError :: ChannelUnavailable { err : format ! ( "Not connected to node: {}" , their_network_key) } ) ,
1179
1184
}
1180
1185
} ;
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) ?;
1183
1186
let res = channel. get_open_channel ( self . genesis_hash . clone ( ) ) ;
1184
1187
1185
1188
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
1281
1284
match channel_state. by_id . entry ( channel_id. clone ( ) ) {
1282
1285
hash_map:: Entry :: Occupied ( mut chan_entry) => {
1283
1286
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) } ) ,
1290
1295
} ;
1291
- let ( shutdown_msg, monitor_update, htlcs) = chan_entry. get_mut ( ) . get_shutdown ( & self . keys_manager , & their_features) ?;
1292
1296
failed_htlcs = htlcs;
1293
1297
1294
1298
// Update the monitor with the shutdown script if necessary.
0 commit comments