summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKieran Bingham <kieran.bingham@ideasonboard.com>2019-01-17 16:13:38 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2019-01-17 21:31:33 +0000
commit565133411988dd6bd65dd6f56758cd96d689fec6 (patch)
tree51b7c2667cc161842fa1b67bc581456d4eebe0e8
parent74fb6ec3dc08abaf1a013894b50b65553e3eb631 (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.cpp3
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_;