]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Attempted fixes for UDP race conditions
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 11 Apr 2004 16:57:13 +0000 (16:57 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 11 Apr 2004 16:57:13 +0000 (16:57 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@534 e03df62e-2008-0410-955e-edbf42e46eb7

include/servers.h
src/connection.cpp
src/inspircd.cpp

index dfb3a8ef8e0459160c35f13c82134e13f7453e86..cd329fa4b1e7fbcb2a0a2bcf9b9398ab6e75a468 100644 (file)
@@ -48,6 +48,8 @@ class serverrec : public connection
        /** Description of the server
         */     
        char description[MAXBUF];
+       
+       bool initiator;
 
        /** Constructor
         */
index 2926ce7540b37cca9902bfa6621c38a448f6fb3a..78b9ed17a6a0467964b2b2675ffebb73b27941f0 100644 (file)
@@ -153,7 +153,7 @@ bool connection::SendPacket(char *message, char* host, int port, long ourkey)
                {
                        fd_set sfd;
                        timeval tval;
-                       tval.tv_usec = 1000;
+                       tval.tv_usec = 100;
                        tval.tv_sec = 0;
                        FD_ZERO(&sfd);
                        FD_SET(fd,&sfd);
index 8a8dbc761ef7721ef4912a983e16dce75905feee..7351463cc94f0744ff5bc47dfd199c362d0c5289 100644 (file)
@@ -5362,6 +5362,7 @@ void handle_connect(char **parameters, int pcnt, userrec *user)
                for (int j = 0; j < 255; j++) {
                        if (servers[j] == NULL) {
                                servers[j] = new serverrec;
+                               servers[j]->initiator = true;
                                strcpy(servers[j]->internal_addr,Link_IPAddr);
                                servers[j]->internal_port = LinkPort;
                                strcpy(servers[j]->name,Link_ServerName);
@@ -6501,6 +6502,14 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve
                case 'F':
                        WriteOpers("Server %s has completed netburst. (%d secs)",source->name,time(NULL)-nb_start);
                        handle_F(token,params,source,reply,udp_host,udp_port);
+
+                       WriteOpers("Sending my burst now.");
+                       nb_start = time(NULL);
+                       if (!source->initiator)
+                       {
+                               DoSync(reply,udp_host,udp_port,MyKey);
+                       }
+                       WriteOpers("Completed burst to %s (%d secs)",source->name,time(NULL)-nb_start);
                break;
                // anything else
                default:
@@ -6595,7 +6604,10 @@ void handle_link_packet(long theirkey, char* udp_msg, char* udp_host, int udp_po
                                if (!strcasecmp(servers[i]->internal_addr,udp_host)) {
                                        servers[i]->key = atoi(params);
                                        log(DEBUG,"Key for this server is now %d",servers[i]->key);
-                                       DoSync(serv,udp_host,udp_port,MyKey);
+                                       if (servers[i]->initiator)
+                                       {
+                                               DoSync(serv,udp_host,udp_port,MyKey);
+                                       }
                                        return;
                                }
                        }