[libcamera-devel] [PATCH 3/5] libcamera: timer: Fix 32 bit wrap

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Jan 17 22:32:34 CET 2019


On 17/01/2019 20:37, Laurent Pinchart wrote:
> 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,

Wait, what? It was here? How did I lose that!

I'll add it back.


Fixes: 1a57bcb8d1a7 ("libcamera: Add event notification infrastructure")


> 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
--
Kieran


More information about the libcamera-devel mailing list