[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