From 1c4239af04ae16cbf6088192556425325cdc8e3a Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sun, 8 Jan 2017 14:15:25 +0100 Subject: Fix clock-nanosleep wrapper * fibers/posix-clocks.scm (clock-nanosleep): clock_nanosleep returns the error value directly; it doesn't set errno. Fix. --- fibers/posix-clocks.scm | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/fibers/posix-clocks.scm b/fibers/posix-clocks.scm index be7c323..dcdcf6d 100644 --- a/fibers/posix-clocks.scm +++ b/fibers/posix-clocks.scm @@ -114,16 +114,14 @@ (define clock-nanosleep (let* ((ptr (dynamic-pointer "clock_nanosleep" exe)) - (proc (pointer->procedure int ptr (list clockid-t int '* '*) - #:return-errno? #t))) + (proc (pointer->procedure int ptr (list clockid-t int '* '*)))) (lambda* (clockid nsec #:key absolute? (buf (nsec->timespec nsec))) - (let ((flags (if absolute? TIMER_ABSTIME 0))) - (call-with-values (lambda () (proc clockid flags buf buf)) - (lambda (ret errno) - (cond - ((zero? ret) (values #t 0)) - ((eqv? ret EINTR) (values #f (timespec->nsec buf))) - (else (error (strerror errno)))))))))) + (let* ((flags (if absolute? TIMER_ABSTIME 0)) + (ret (proc clockid flags buf buf))) + (cond + ((zero? ret) (values #t 0)) + ((eqv? ret EINTR) (values #f (timespec->nsec buf))) + (else (error (strerror ret)))))))) ;; Quick little test to determine the resolution of clock-nanosleep on ;; different clock types, and how much CPU that takes. Results on -- cgit v1.2.3