X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Funix.lisp;h=248f72e1c77cfa96b319266f07017bdfe60fe9df;hb=661bcd7d3e0bdc1966f3878fa71d322ffd5927a4;hp=64db7ed483ee66aef185abe89e3b48cb4a42ccaf;hpb=b021c15b8d8e4ea4740323eaee9535c4e7cb2232;p=sbcl.git diff --git a/src/code/unix.lisp b/src/code/unix.lisp index 64db7ed..248f72e 100644 --- a/src/code/unix.lisp +++ b/src/code/unix.lisp @@ -950,8 +950,8 @@ corresponds to NAME, or NIL if there is none." (defun nanosleep (secs nsecs) (with-alien ((req (struct timespec)) (rem (struct timespec))) - (setf (slot req 'tv-sec) secs) - (setf (slot req 'tv-nsec) nsecs) + (setf (slot req 'tv-sec) secs + (slot req 'tv-nsec) nsecs) (loop while (and (eql sb!unix:eintr (nth-value 1 (int-syscall ("nanosleep" (* (struct timespec)) @@ -976,10 +976,12 @@ corresponds to NAME, or NIL if there is none." (rem-nsec (slot rem 'tv-nsec))) (when (or (> secs rem-sec) (and (= secs rem-sec) (>= nsecs rem-nsec))) - (setf secs rem-sec + ;; Update for next round. + (setf secs rem-sec nsecs rem-nsec) t))) - do (rotatef req rem)))) + do (setf (slot req 'tv-sec) (slot rem 'tv-sec) + (slot req 'tv-nsec) (slot rem 'tv-nsec))))) (defun unix-get-seconds-west (secs) (multiple-value-bind (ignore seconds dst) (get-timezone secs)