diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-02-16 15:17:37 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-02-16 15:29:35 +0100 |
commit | 39860539599f74958c0cc9008fc6fa271349b58b (patch) | |
tree | 4d2b10f1d8476d3c9ec5854be9111c46e4cb0a16 | |
parent | 2c7b350f93564daee16a311c001a85577d4b69e1 (diff) | |
download | guile-39860539599f74958c0cc9008fc6fa271349b58b.tar.gz |
srfi-18: 'thread-sleep!' timeout-as-a-number is relative.
This is a followup to <https://bugs.gnu.org/29704>.
* module/srfi/srfi-18.scm (thread-sleep!): When TIMEOUT is a number,
keep it as-is.
* test-suite/tests/srfi-18.test ("thread sleep with number"): Pass 0 as
the timeout.
("thread sleeps fractions of a second"): Pass 0.5 as the timeout.
-rw-r--r-- | module/srfi/srfi-18.scm | 6 | ||||
-rw-r--r-- | test-suite/tests/srfi-18.test | 5 |
2 files changed, 5 insertions, 6 deletions
diff --git a/module/srfi/srfi-18.scm b/module/srfi/srfi-18.scm index 6d6596ffb..7177e0690 100644 --- a/module/srfi/srfi-18.scm +++ b/module/srfi/srfi-18.scm @@ -235,9 +235,9 @@ object (absolute point in time), or #f." (define (thread-yield!) (threads:yield) *unspecified*) (define (thread-sleep! timeout) - (let* ((ct (time->seconds (current-time))) - (t (cond ((time? timeout) (- (time->seconds timeout) ct)) - ((number? timeout) (- timeout ct)) + (let* ((t (cond ((time? timeout) (- (time->seconds timeout) + (time->seconds (current-time)))) + ((number? timeout) timeout) (else (scm-error 'wrong-type-arg "thread-sleep!" "Wrong type argument: ~S" (list timeout) diff --git a/test-suite/tests/srfi-18.test b/test-suite/tests/srfi-18.test index fc36dab8a..e5473391a 100644 --- a/test-suite/tests/srfi-18.test +++ b/test-suite/tests/srfi-18.test @@ -94,13 +94,12 @@ (unspecified? (thread-sleep! future-time)))) (pass-if "thread sleep with number" - (let ((old-secs (car (current-time)))) - (unspecified? (thread-sleep! (+ (time->seconds (current-time))))))) + (unspecified? (thread-sleep! 0))) (pass-if "thread sleeps fractions of a second" (let* ((current (time->seconds (current-time))) (future (+ current 0.5))) - (thread-sleep! future) + (thread-sleep! 0.5) (>= (time->seconds (current-time)) future))) (pass-if "thread does not sleep on past time" |