Fix race in peer connection in C++ demo app
authorMatt Corallo <git@bluematt.me>
Sun, 29 Oct 2023 18:40:47 +0000 (18:40 +0000)
committerMatt Corallo <git@bluematt.me>
Sun, 29 Oct 2023 18:44:01 +0000 (18:44 +0000)
When we disconnect then immediately reconnect from one peer we may
still get the second connection through before the disconnection is
handled on the other end, causing connection failures. We fix this
here by disconnecting on both ends before reconnecting.

lightning-c-bindings/demo.cpp

index add28af90e4532d5cb346c5c0c43936c6fdfc9b2..dc79696f09e341190cd48d929cff6b120e70767d 100644 (file)
@@ -242,6 +242,7 @@ public:
 
                // Then disconnect the "main" connection, while another connection is being made.
                PeerManager_disconnect_by_node_id(&net1, ChannelManager_get_our_node_id(&cm2));
+               PeerManager_disconnect_by_node_id(&net2, ChannelManager_get_our_node_id(&cm1));
                assert(!socket_connect(node1_handler, ChannelManager_get_our_node_id(&cm2), (sockaddr*)&listen_addr, sizeof(listen_addr)));
 
                std::cout << __FILE__ << ":" << __LINE__ << " - " << "Awaiting new connection handshake..." << std::endl;