1 ;;;; Tests for async signal safety.
3 ;;;; This software is part of the SBCL system. See the README file for
6 ;;;; While most of SBCL is derived from the CMU CL system, the test
7 ;;;; files (like this one) were written from scratch after the fork
10 ;;;; This software is in the public domain and is provided with
11 ;;;; absoluely no warranty. See the COPYING and CREDITS files for
12 ;;;; more information.
14 (use-package :test-util
)
16 (with-test (:name
(:async-unwind
:specials
))
17 (let ((*x0
* nil
) (*x1
* nil
) (*x2
* nil
) (*x3
* nil
) (*x4
* nil
))
18 (declare (special *x0
* *x1
* *x2
* *x3
* *x4
*))
22 (sb-ext:schedule-timer
(sb-ext:make-timer
27 (let ((*x0
* (cons nil nil
)) (*x1
* (cons nil nil
))
28 (*x2
* (cons nil nil
)) (*x3
* (cons nil nil
))
29 (*x4
* (cons nil nil
)))
30 (declare (special *x0
* *x1
* *x2
* *x3
* *x4
*)))))
31 (when (not (and (null *x0
*) (null *x1
*) (null *x2
*) (null *x3
*)
33 (format t
"~S ~S ~S ~S ~S~%" *x0
* *x1
* *x2
* *x3
* *x4
*)
41 (with-test (:name
(:signal
:errno
)
42 ;; This test asserts that nanosleep behaves correctly
43 ;; for invalid values and sets EINVAL. Well, we have
44 ;; nanosleep on Windows, but it depends on the caller
45 ;; (namely SLEEP) to produce known-good arguments, and
46 ;; even if we wanted to check argument validity,
47 ;; integration with `errno' is not to be expected.
51 (timer (make-timer (lambda ()
52 (sb-unix:unix-open
"~!@#$%^&*[]()/\\" 0 0)
53 (assert (= sb-unix
:enoent
54 (sb-unix::get-errno
)))
55 (setq returning t
)))))
56 (schedule-timer timer
0.2)
57 ;; Fail and set errno.
58 (sb-unix:nanosleep -
1 -
1)
59 (setq saved-errno
(sb-unix::get-errno
))
60 (assert (= saved-errno sb-posix
:einval
))
61 ;; Wait, but not with sleep because that will be interrupted and
63 (loop until returning
)
64 (assert (= saved-errno
(sb-unix::get-errno
)))))
66 (with-test (:name
:handle-interactive-interrupt
67 ;; It is desirable to support C-c on Windows, but SIGINT
68 ;; is not the mechanism to use on this platform.
70 (assert (eq :condition
73 (sb-thread::kill-safely
74 (sb-thread::thread-os-thread sb-thread
::*current-thread
*)
76 #+sb-safepoint-strictly
77 ;; In this case, the signals handler gets invoked
78 ;; indirectly through an INTERRUPT-THREAD. Give it
79 ;; enough time to hit.
81 (sb-sys:interactive-interrupt
()
84 (with-test (:name
:bug-640516
)
85 ;; On Darwin interrupting a SLEEP so that it took longer than
86 ;; the requested amount caused it to hang.
89 (sb-ext:with-timeout
10
91 (handler-bind ((sb-ext:timeout
(lambda (c)
96 (sb-ext:with-timeout
0.1 (sleep 1) t
))))