diff options
author | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2019-01-17 16:13:38 +0000 |
---|---|---|
committer | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2019-01-17 21:31:33 +0000 |
commit | 565133411988dd6bd65dd6f56758cd96d689fec6 (patch) | |
tree | 51b7c2667cc161842fa1b67bc581456d4eebe0e8 | |
parent | 74fb6ec3dc08abaf1a013894b50b65553e3eb631 (diff) |
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: 1a57bcb8d1a7 ("libcamera: Add event notification infrastructure")
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r-- | src/libcamera/timer.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libcamera/timer.cpp b/src/libcamera/timer.cpp index b5212ba2..306825fd 100644 --- a/src/libcamera/timer.cpp +++ b/src/libcamera/timer.cpp @@ -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_; |