bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#19581: 'sleep' return value is incorrectly rounded


From: Ludovic Courtès
Subject: bug#19581: 'sleep' return value is incorrectly rounded
Date: Thu, 23 Jun 2016 15:09:22 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Hello,

Andy Wingo <address@hidden> skribis:

> On Tue 13 Jan 2015 13:58, address@hidden (Ludovic Courtès) writes:
>
>> I just noticed that ‘sleep’ essentially always rounds down its return
>> value, which makes it unreliable, as in this example:
>>
>> $ time guile -c '(sigaction SIGINT +) (call-with-new-thread (lambda () (let 
>> loop () (kill (getpid) SIGINT) (loop)))) (let loop ((n 3)) (when (> n 0) 
>> (loop (sleep (pk "s" n)))))'
>>
>> ;;; ("s" 3)
>>
>> ;;; ("s" 2)
>>
>> ;;; ("s" 1)
>>
>> real 0m0.039s
>> user 0m0.052s
>> sys  0m0.017s
>>
>> Here ‘loop’ is meant to assure we sleep for roughly 3 seconds, but
>> because of the incorrect rounding, we end up not sleeping at all.
>
> Hummmmmmmmmm.
>
> I don't think we can change anything in 2.0.  Right?
>
> In master, how about (1) we allow sleep to take any real number, in
> seconds; (2) sleep returns an inexact real number.  Then we can
> deprecate usleep and "standardize" on sleeping in units of seconds.
> Internally we refactor scm_std_usleep/* to take a 64-bit double for the
> number of seconds to sleep and return a double for the time remaining.

Sounds like a plan.  There could be programs that will break if ‘sleep’
gives them an inexact instead of an integer.  Maybe we can assume this
is an unlikely situation, though.

Thoughts?

Ludo’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]