On some systems the call to uclock() would sometimes return a slightly earlier time than the previous call, this would result in a negative delta time. This is now checked for and uclock() is now called repeatedly until we have a valid delta time.