]> git.meshlink.io Git - meshlink/commitdiff
test/channel: don't let both sides connect to each other simultaneously.
authorGuus Sliepen <guus@meshlink.io>
Fri, 7 Nov 2014 23:53:58 +0000 (23:53 +0000)
committerGuus Sliepen <guus@meshlink.io>
Sat, 27 Dec 2014 17:29:50 +0000 (18:29 +0100)
The channel test fails to work reliably when the two threads are started
exactly simultaneously and both sides try to connect to each other. Both
sides simultaneously initiate a end-to-end SPTPS connection by sending
the appropriate req_key request, but upon reception of each others
request they reset their own state, causing SPTPS packets from the old
and the new state to cross each other. A timeout will occur eventually,
causing one side to try to restart the SPTPS connection. Since the
timeouts are slightly randomized, this sometimes causes the channel test
to work, sometimes not.

test/channels.c

index f572d1b110f19bf77a85abb8600c9496ffd06216..9c3e35b5b7022a3c4ec6b0c350c8ab01d3220b95 100644 (file)
@@ -68,7 +68,6 @@ int main(int argc, char *argv[]) {
        // Import and export both side's data
 
        meshlink_add_address(mesh1, "localhost");
-       meshlink_add_address(mesh2, "localhost");
 
        char *data = meshlink_export(mesh1);
        if(!data) {
@@ -110,8 +109,6 @@ int main(int argc, char *argv[]) {
                return 1;
        }
 
-       usleep(123456);
-
        if(!meshlink_start(mesh2)) {
                fprintf(stderr, "Bar could not start\n");
                return 1;
@@ -130,8 +127,6 @@ int main(int argc, char *argv[]) {
                return 1;
        }
 
-       sleep(1);
-
        // Open a channel from foo to bar.
        
        meshlink_node_t *bar = meshlink_get_node(mesh1, "bar");