Skip to content

Commit

Permalink
1.0.30.24: hopefully fix _long_ SLEEP issues on OpenBSD
Browse files Browse the repository at this point in the history
 * OpenBSD refuses to nanosleep() over 100 million seconds (returning
   EINVAL), so loop with 100 million second sleeps till the time left
   is smaller than that.

   ...who knows, maybe there is a good reason to sleep over 3 years?

   Bug reported by Johsh Elsasser.
  • Loading branch information
nikodemus committed Jul 31, 2009
1 parent 72ec083 commit 10a42ef
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 4 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ changes relative to sbcl-1.0.30:
well.
* improvement: improved address space layout on OpenBSD (thanks to Josh
Elsasser)
* bug fix: SLEEP supports times over 100 million seconds on long on OpenBSD
as well. (reported by Josh Elsasser)
* bug fix: DELETE-FILE on streams no longer closes the stream with :ABORT T,
leading to possible attempts to delete the same file twice. See docstring
on DELETE-FILE for details. (reported by John Fremlin)
Expand Down
10 changes: 7 additions & 3 deletions src/code/toplevel.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion version.lisp-expr
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
"1.0.30.23"
"1.0.30.24"

0 comments on commit 10a42ef

Please sign in to comment.