libcamera: timer: Fix 32 bit wrap

The msec parameter was multiplied as a 32 bit value when converting to
nanosecond resolution. This wraps at 4.2949 seconds, and causes timers
longer than this to fail.

Fix the multiplication to upcast to 64 bit using an unsigned long long
specifier on the multiplier.

While we're here, initialise the two integer class members in the
constructor initialiser list.

Fixes: 1a57bcb8d1 ("libcamera: Add event notification infrastructure")
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Kieran Bingham 2019-01-17 16:13:38 +00:00
parent 74fb6ec3dc
commit 5651334119

View file

@ -36,6 +36,7 @@ namespace libcamera {
* \brief Construct a timer
*/
Timer::Timer()
: interval_(0), deadline_(0)
{
}
@ -51,7 +52,7 @@ void Timer::start(unsigned int msec)
clock_gettime(CLOCK_MONOTONIC, &tp);
interval_ = msec;
deadline_ = tp.tv_sec * 1000000000ULL + tp.tv_nsec + msec * 1000000;
deadline_ = tp.tv_sec * 1000000000ULL + tp.tv_nsec + msec * 1000000ULL;
LOG(Debug) << "Starting timer " << this << " with interval " << msec
<< ": deadline " << deadline_;