Skip to content

Commit a08ce0f

Browse files
committed
f - avoid Deref recursion limit
1 parent f023be2 commit a08ce0f

File tree

1 file changed

+12
-17
lines changed

1 file changed

+12
-17
lines changed

lightning/src/ln/peer_handler.rs

+12-17
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,6 @@ impl CustomOnionMessageContents for Infallible {
218218
fn tlv_type(&self) -> u64 { unreachable!(); }
219219
}
220220

221-
impl Deref for IgnoringMessageHandler {
222-
type Target = IgnoringMessageHandler;
223-
fn deref(&self) -> &Self { self }
224-
}
225-
226221
// Implement Type for Infallible, note that it cannot be constructed, and thus you can never call a
227222
// method that takes self for it.
228223
impl wire::Type for Infallible {
@@ -599,7 +594,7 @@ impl Peer {
599594
/// issues such as overly long function definitions.
600595
///
601596
/// (C-not exported) as `Arc`s don't make sense in bindings.
602-
pub type SimpleArcPeerManager<SD, M, T, F, C, L> = PeerManager<SD, Arc<SimpleArcChannelManager<M, T, F, L>>, Arc<P2PGossipSync<Arc<NetworkGraph<Arc<L>>>, Arc<C>, Arc<L>>>, Arc<SimpleArcOnionMessenger<L>>, Arc<L>, IgnoringMessageHandler>;
597+
pub type SimpleArcPeerManager<SD, M, T, F, C, L> = PeerManager<SD, Arc<SimpleArcChannelManager<M, T, F, L>>, Arc<P2PGossipSync<Arc<NetworkGraph<Arc<L>>>, Arc<C>, Arc<L>>>, Arc<SimpleArcOnionMessenger<L>>, Arc<L>, Arc<IgnoringMessageHandler>>;
603598

604599
/// SimpleRefPeerManager is a type alias for a PeerManager reference, and is the reference
605600
/// counterpart to the SimpleArcPeerManager type alias. Use this type by default when you don't
@@ -609,7 +604,7 @@ pub type SimpleArcPeerManager<SD, M, T, F, C, L> = PeerManager<SD, Arc<SimpleArc
609604
/// helps with issues such as long function definitions.
610605
///
611606
/// (C-not exported) as general type aliases don't make sense in bindings.
612-
pub type SimpleRefPeerManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k, SD, M, T, F, C, L> = PeerManager<SD, SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, M, T, F, L>, &'e P2PGossipSync<&'g NetworkGraph<&'f L>, &'h C, &'f L>, &'i SimpleRefOnionMessenger<'j, 'k, L>, &'f L, IgnoringMessageHandler>;
607+
pub type SimpleRefPeerManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k, SD, M, T, F, C, L> = PeerManager<SD, SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, M, T, F, L>, &'e P2PGossipSync<&'g NetworkGraph<&'f L>, &'h C, &'f L>, &'i SimpleRefOnionMessenger<'j, 'k, L>, &'f L, Arc<IgnoringMessageHandler>>;
613608

614609
/// A PeerManager manages a set of peers, described by their [`SocketDescriptor`] and marshalls
615610
/// socket events into messages which it passes on to its [`MessageHandler`].
@@ -700,7 +695,7 @@ macro_rules! encode_msg {
700695
}}
701696
}
702697

703-
impl<Descriptor: SocketDescriptor, CM: Deref, OM: Deref, L: Deref> PeerManager<Descriptor, CM, IgnoringMessageHandler, OM, L, IgnoringMessageHandler> where
698+
impl<Descriptor: SocketDescriptor, CM: Deref, OM: Deref, L: Deref> PeerManager<Descriptor, CM, Arc<IgnoringMessageHandler>, OM, L, Arc<IgnoringMessageHandler>> where
704699
CM::Target: ChannelMessageHandler,
705700
OM::Target: OnionMessageHandler,
706701
L::Target: Logger {
@@ -720,13 +715,13 @@ impl<Descriptor: SocketDescriptor, CM: Deref, OM: Deref, L: Deref> PeerManager<D
720715
pub fn new_channel_only(channel_message_handler: CM, onion_message_handler: OM, our_node_secret: SecretKey, current_time: u32, ephemeral_random_data: &[u8; 32], logger: L) -> Self {
721716
Self::new(MessageHandler {
722717
chan_handler: channel_message_handler,
723-
route_handler: IgnoringMessageHandler{},
718+
route_handler: Arc::new(IgnoringMessageHandler {}),
724719
onion_message_handler,
725-
}, our_node_secret, current_time, ephemeral_random_data, logger, IgnoringMessageHandler{})
720+
}, our_node_secret, current_time, ephemeral_random_data, logger, Arc::new(IgnoringMessageHandler {}))
726721
}
727722
}
728723

729-
impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref> PeerManager<Descriptor, ErroringMessageHandler, RM, IgnoringMessageHandler, L, IgnoringMessageHandler> where
724+
impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref> PeerManager<Descriptor, ErroringMessageHandler, RM, Arc<IgnoringMessageHandler>, L, Arc<IgnoringMessageHandler>> where
730725
RM::Target: RoutingMessageHandler,
731726
L::Target: Logger {
732727
/// Constructs a new `PeerManager` with the given `RoutingMessageHandler`. No channel message
@@ -747,8 +742,8 @@ impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref> PeerManager<Descriptor,
747742
Self::new(MessageHandler {
748743
chan_handler: ErroringMessageHandler::new(),
749744
route_handler: routing_message_handler,
750-
onion_message_handler: IgnoringMessageHandler{},
751-
}, our_node_secret, current_time, ephemeral_random_data, logger, IgnoringMessageHandler{})
745+
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
746+
}, our_node_secret, current_time, ephemeral_random_data, logger, Arc::new(IgnoringMessageHandler {}))
752747
}
753748
}
754749

@@ -2219,20 +2214,20 @@ mod tests {
22192214
cfgs
22202215
}
22212216

2222-
fn create_network<'a>(peer_count: usize, cfgs: &'a Vec<PeerManagerCfg>) -> Vec<PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler, &'a test_utils::TestRoutingMessageHandler, IgnoringMessageHandler, &'a test_utils::TestLogger, IgnoringMessageHandler>> {
2217+
fn create_network<'a>(peer_count: usize, cfgs: &'a Vec<PeerManagerCfg>) -> Vec<PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler, &'a test_utils::TestRoutingMessageHandler, Arc<IgnoringMessageHandler>, &'a test_utils::TestLogger, Arc<IgnoringMessageHandler>>> {
22232218
let mut peers = Vec::new();
22242219
for i in 0..peer_count {
22252220
let node_secret = SecretKey::from_slice(&[42 + i as u8; 32]).unwrap();
22262221
let ephemeral_bytes = [i as u8; 32];
2227-
let msg_handler = MessageHandler { chan_handler: &cfgs[i].chan_handler, route_handler: &cfgs[i].routing_handler, onion_message_handler: IgnoringMessageHandler {} };
2228-
let peer = PeerManager::new(msg_handler, node_secret, 0, &ephemeral_bytes, &cfgs[i].logger, IgnoringMessageHandler {});
2222+
let msg_handler = MessageHandler { chan_handler: &cfgs[i].chan_handler, route_handler: &cfgs[i].routing_handler, onion_message_handler: Arc::new(IgnoringMessageHandler {}) };
2223+
let peer = PeerManager::new(msg_handler, node_secret, 0, &ephemeral_bytes, &cfgs[i].logger, Arc::new(IgnoringMessageHandler {}));
22292224
peers.push(peer);
22302225
}
22312226

22322227
peers
22332228
}
22342229

2235-
fn establish_connection<'a>(peer_a: &PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler, &'a test_utils::TestRoutingMessageHandler, IgnoringMessageHandler, &'a test_utils::TestLogger, IgnoringMessageHandler>, peer_b: &PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler, &'a test_utils::TestRoutingMessageHandler, IgnoringMessageHandler, &'a test_utils::TestLogger, IgnoringMessageHandler>) -> (FileDescriptor, FileDescriptor) {
2230+
fn establish_connection<'a>(peer_a: &PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler, &'a test_utils::TestRoutingMessageHandler, Arc<IgnoringMessageHandler>, &'a test_utils::TestLogger, Arc<IgnoringMessageHandler>>, peer_b: &PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler, &'a test_utils::TestRoutingMessageHandler, Arc<IgnoringMessageHandler>, &'a test_utils::TestLogger, Arc<IgnoringMessageHandler>>) -> (FileDescriptor, FileDescriptor) {
22362231
let secp_ctx = Secp256k1::new();
22372232
let a_id = PublicKey::from_secret_key(&secp_ctx, &peer_a.our_node_secret);
22382233
let mut fd_a = FileDescriptor { fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())) };

0 commit comments

Comments
 (0)