Re: [PATCH] RISC-V: Reliably initialize t0 in _times()

Corinna Vinschen <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
On Aug  2 18:46, Christoph Muellner wrote:
> From: Christoph Muellner <[email protected]>
> 
> The current implementation does not reliably initialize t0 once.
> Additionally the initialization requires two calls to _gettimeofday().
> Let's sacrifice a byte to keep the initialization status
> and reduce the maximum number of calls to _gettimeofday().
> 
> This has caused issues in an application that invokes clock().
> The problematic situation is as follows:
> 
> 1) The program calls clock() which calls _times().
> 2) _gettimeofday(&t0, 0) puts 0 in t0.tv_usec (because less than 1 us has
>    elapsed since the beginning of time).
> 3) _gettimeofday(&t, 0) puts 1 in t.tv_usec (since now more than 1 us has
>    elapsed since the beginning of time).
> 4) That call to clock() returns 1 (the value from step 3 minus the value in
>    step 2).
> 5) The program does a second call to clock().
> 6) The code above still sees 0 in t0 so it tries to update t0 again and
>    _gettimeofday(&t0, 0) puts 1 in t0.tv_usec.
> 7) The _gettimeofday(&t, 0) puts 1 in t.tv_usec (since less than 1us has
>    elapsed since step 3).
> 8) clock() returns 0 (step 7 minus step 6) and indicates that time is
>    moving backwards.
> 
> Signed-off-by: Christoph Muellner <[email protected]>
> ---
>  libgloss/riscv/sys_times.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)

Pushed.


Thanks,
Corinna
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.