spring: Avoid looping if time appears to be going backwards

Since the time values are unsigned integers we can check whether the msec is
smaller than spring->timestamp by checking if the subtraction overflows into a
value greater than half the maximum unsigned integer range (ie. top bit set)
This commit is contained in:
Rob Bradford 2012-08-03 17:02:04 +01:00 committed by Kristian Høgsberg
parent 552d12b10e
commit c4f3338745

View File

@ -46,6 +46,14 @@ weston_spring_update(struct weston_spring *spring, uint32_t msec)
{
double force, v, current, step;
/* Avoid entering into an infinite loop */
if (msec - spring->timestamp > UINT32_MAX / 2) {
weston_log("timestamps going backwards (from %u to %u)\n",
spring->timestamp, msec);
spring->current = spring->previous = spring->target;
return;
}
step = 0.01;
while (4 < msec - spring->timestamp) {
current = spring->current;