[vlc-devel] [PATCH] core: fix vlc_tick_now on darwin platform
Steve Lhomme
robux4 at ycbcr.xyz
Thu Sep 27 08:01:33 CEST 2018
Not having a mac like most people I can only make changes blindly and
hope it works. I did take some time on these changes to make sure I
didn't overlook something, but it wasn't enough.
On 27/09/2018 06:00, Zhao Zhili wrote:
> I didn't build on MacOS for a few days, so I didn't know from when
> does the MacOS version was broken. Debugging on this issue really
> takes some time including slow rebuild on old MacBook. So please do
> some basic test before push. I can help on the test if you don't have
> the environment.
>
> On 2018年09月27日 11:42, Zhao Zhili wrote:
>> ---
>> src/darwin/thread.c | 10 +++-------
>> 1 file changed, 3 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/darwin/thread.c b/src/darwin/thread.c
>> index f5eb4f2..0dd1e3c 100644
>> --- a/src/darwin/thread.c
>> +++ b/src/darwin/thread.c
>> @@ -516,14 +516,10 @@ vlc_tick_t vlc_tick_now (void)
>> vlc_clock_setup();
>> uint64_t date = mach_absolute_time();
>> - /* denom is uint32_t, switch to 64 bits to prevent overflow. */
>> - uint64_t denom = vlc_clock_conversion_factor.denom;
>> -
>> - /* Switch to microsecs */
>> - denom *= UINT64_C(1000);
>> -
>> /* Split the division to prevent overflow */
>> - return vlc_tick_from_frac( date *
>> vlc_clock_conversion_factor.numer, denom );
>> + lldiv_t d = lldiv (vlc_clock_conversion_factor.numer,
>> vlc_clock_conversion_factor.denom);
>> + date = (d.quot * date) + ((d.rem * date) /
>> vlc_clock_conversion_factor.denom);
Here the (date * d.rem) might overflow. The original 1000 multiplication
was lowering the d.rem value which was less bound to overflow.
In practice it really depends on the common values of
vlc_clock_conversion_factor.numer / vlc_clock_conversion_factor.denom. I
suspect they are both small values.
>> + return VLC_TICK_FROM_NS(date);
>> }
>> #undef vlc_tick_wait
>
>
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list