[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