]> git.lizzy.rs Git - rust.git/blob - src/test/ui/signal-alternate-stack-cleanup.rs
Pin panic-in-drop=abort test to old pass manager
[rust.git] / src / test / ui / signal-alternate-stack-cleanup.rs
1 // run-pass
2 // Previously memory for alternate signal stack have been unmapped during
3 // main thread exit while still being in use by signal handlers. This test
4 // triggers this situation by sending signal from atexit handler.
5 //
6 // ignore-wasm32-bare no libc
7 // ignore-windows
8 // ignore-sgx no libc
9 // ignore-vxworks no SIGWINCH in user space
10
11 #![feature(rustc_private)]
12 extern crate libc;
13
14 use libc::*;
15
16 unsafe extern "C" fn signal_handler(signum: c_int, _: *mut siginfo_t, _: *mut c_void) {
17     assert_eq!(signum, SIGWINCH);
18 }
19
20 extern "C" fn send_signal() {
21     unsafe {
22         raise(SIGWINCH);
23     }
24 }
25
26 fn main() {
27     unsafe {
28         // Install signal handler that runs on alternate signal stack.
29         let mut action: sigaction = std::mem::zeroed();
30         action.sa_flags = (SA_ONSTACK | SA_SIGINFO) as _;
31         action.sa_sigaction = signal_handler as sighandler_t;
32         sigaction(SIGWINCH, &action, std::ptr::null_mut());
33
34         // Send SIGWINCH on exit.
35         atexit(send_signal);
36     }
37 }