]> git.sesse.net Git - cubemap/blobdiff - server.cpp
Replace an assert with a small hack.
[cubemap] / server.cpp
index 01ed0ff041697ce1894c16652b374c66881e92f3..079b629dcaa9b601b31033c3a4c55626711f7662 100644 (file)
@@ -217,9 +217,15 @@ void Server::add_client(int sock)
        assert(ret.second == true);  // Should not already exist.
        Client *client_ptr = &ret.first->second;
 
        assert(ret.second == true);  // Should not already exist.
        Client *client_ptr = &ret.first->second;
 
-       // Connection timestamps must be nondecreasing.
-       assert(clients_ordered_by_connect_time.empty() ||
-              !is_earlier(client_ptr->connect_time, clients_ordered_by_connect_time.back().first));
+       // Connection timestamps must be nondecreasing. I can't find any guarantee
+       // that even the monotonic clock can't go backwards by a small amount
+       // (think switching between CPUs with non-synchronized TSCs), so if
+       // this actually should happen, we hack around it by fudging
+       // connect_time.
+       if (!clients_ordered_by_connect_time.empty() &&
+           is_earlier(client_ptr->connect_time, clients_ordered_by_connect_time.back().first)) {
+               client_ptr->connect_time = clients_ordered_by_connect_time.back().first;
+       }
        clients_ordered_by_connect_time.push(make_pair(client_ptr->connect_time, sock));
 
        // Start listening on data from this socket.
        clients_ordered_by_connect_time.push(make_pair(client_ptr->connect_time, sock));
 
        // Start listening on data from this socket.