X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftoplevel.lisp;h=0868844ad82e64b6d1b1739742cb72695b1fb62a;hb=bd2df60f7c3f579a9c7610925c79a0e783adaa0e;hp=66b0b3fa0472f07912dd77996131dbebe3b27225;hpb=237ec432952f0e7d4a4bcd5f683942a253cac56a;p=sbcl.git diff --git a/src/code/toplevel.lisp b/src/code/toplevel.lisp index 66b0b3f..0868844 100644 --- a/src/code/toplevel.lisp +++ b/src/code/toplevel.lisp @@ -174,9 +174,13 @@ any non-negative real number." (multiple-value-bind (sec frac) (truncate seconds) (values sec (truncate frac 1e-9)))) - ;; nanosleep accepts time_t as the first argument, - ;; so truncating is needed. 68 years on 32-bit platform should be enough - (sb!unix:nanosleep (min sec (1- (ash 1 (1- sb!vm:n-word-bits)))) nsec)) + ;; nanosleep() accepts time_t as the first argument, but on some platforms + ;; it is restricted to 100 million seconds. Maybe someone can actually + ;; have a reason to sleep for over 3 years? + (loop while (> sec (expt 10 8)) + do (decf sec (expt 10 8)) + (sb!unix:nanosleep (expt 10 8) 0)) + (sb!unix:nanosleep sec nsec)) #!+win32 (sb!win32:millisleep (truncate (* seconds 1000))) nil)