[libcamera-devel] [PATCH 3/5] libcamera: timer: Fix 32 bit wrap
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jan 17 21:37:39 CET 2019
Hi Kieran,
Thank you for the patch.
On Thu, Jan 17, 2019 at 08:20:41PM +0000, Kieran Bingham wrote:
> 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.
>
A Fixes: tag would be nice. Apart from that,
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> src/libcamera/timer.cpp | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/src/libcamera/timer.cpp b/src/libcamera/timer.cpp
> index b5212ba26869..306825fde3c0 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_;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list