(require :sb-posix)
-(with-test (:name (:signal :errno))
+(with-test (:name (:signal :errno)
+ ;; This test asserts that nanosleep behaves correctly
+ ;; for invalid values and sets EINVAL. Well, we have
+ ;; nanosleep on Windows, but it depends on the caller
+ ;; (namely SLEEP) to produce known-good arguments, and
+ ;; even if we wanted to check argument validity,
+ ;; integration with `errno' is not to be expected.
+ :skipped-on :win32)
(let* (saved-errno
(returning nil)
(timer (make-timer (lambda ()
(loop repeat 1000000000)
(assert (= saved-errno (sb-unix::get-errno)))))
-(with-test (:name :handle-interactive-interrupt)
+(with-test (:name :handle-interactive-interrupt
+ ;; It is desirable to support C-c on Windows, but SIGINT
+ ;; is not the mechanism to use on this platform.
+ :skipped-on :win32)
(assert (eq :condition
(handler-case
- (sb-thread::kill-safely
- (sb-thread::thread-os-thread sb-thread::*current-thread*)
- sb-unix:sigint)
+ (progn
+ (sb-thread::kill-safely
+ (sb-thread::thread-os-thread sb-thread::*current-thread*)
+ sb-unix:sigint)
+ #+sb-safepoint-strictly
+ ;; In this case, the signals handler gets invoked
+ ;; indirectly through an INTERRUPT-THREAD. Give it
+ ;; enough time to hit.
+ (sleep 1))
(sb-sys:interactive-interrupt ()
:condition)))))
(sb-ext:with-timeout 0.1 (sleep 1) t))))
(sb-ext:timeout ()
nil))))
-
-(with-test (:name :sleep-many-interrupts)
- (let ((n 0)
- (timer nil))
- (flet ((trip ()
- (when (< (incf n) 5)
- (sleep 0.1)
- (schedule-timer timer 0.1))))
- (setf timer (make-timer #'trip))
- (schedule-timer timer 0.1)
- (let ((start (get-internal-real-time)))
- (sleep 1.5)
- (let ((ticks (/ (float (- (get-internal-real-time) start))
- internal-time-units-per-second)))
- (assert (< 1.4 ticks 1.6))
- (assert (= n 5)))))))