X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=server.cpp;h=079b629dcaa9b601b31033c3a4c55626711f7662;hp=01ed0ff041697ce1894c16652b374c66881e92f3;hb=ce7802e5d5291c414883efbad93a9d165c03f40c;hpb=1dfa45f9af3f885a50d2bef384ea89b0a4cf17c5 diff --git a/server.cpp b/server.cpp index 01ed0ff..079b629 100644 --- a/server.cpp +++ b/server.cpp @@ -217,9 +217,15 @@ void Server::add_client(int sock) 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.