From 4c64da9ce5d22ccf6d98b0dc34a5debd9222130f Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 27 Oct 2015 10:27:32 -0700 Subject: [PATCH] try to avoid negative roll-over when moving to or from server time --- libraries/physics/src/ObjectAction.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/libraries/physics/src/ObjectAction.cpp b/libraries/physics/src/ObjectAction.cpp index 8ed06aea5d..ff8382a143 100644 --- a/libraries/physics/src/ObjectAction.cpp +++ b/libraries/physics/src/ObjectAction.cpp @@ -247,15 +247,29 @@ bool ObjectAction::lifetimeIsOver() { } quint64 ObjectAction::localTimeToServerTime(quint64 timeValue) const { + // 0 indicates no expiration if (timeValue == 0) { return 0; } - return timeValue + getEntityServerClockSkew(); + + int serverClockSkew = getEntityServerClockSkew(); + if (serverClockSkew < 0 && timeValue <= (quint64)(-serverClockSkew)) { + return 1; // non-zero but long-expired value to avoid negative roll-over + } + + return timeValue + serverClockSkew; } quint64 ObjectAction::serverTimeToLocalTime(quint64 timeValue) const { + // 0 indicates no expiration if (timeValue == 0) { return 0; } - return timeValue - getEntityServerClockSkew(); + + int serverClockSkew = getEntityServerClockSkew(); + if (serverClockSkew > 0 && timeValue <= (quint64)serverClockSkew) { + return 1; // non-zero but long-expired value to avoid negative roll-over + } + + return timeValue - serverClockSkew; }