2 * Copyright © 2012 Red Hat, Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
24 #ifdef HAVE_DIX_CONFIG_H
25 #include <dix-config.h>
31 static int last_signal
= 0;
32 static int expect_signal
= 0;
34 static void sighandler(int signal
)
36 assert(expect_signal
);
47 sig_is_blocked(int sig
)
51 sigemptyset(¤t
);
52 assert(sigprocmask(SIG_BLOCK
, NULL
, ¤t
) == 0);
53 return sigismember(¤t
, sig
);
56 static void block_sigio_test(void)
61 sigemptyset(¤t
);
62 assert(!sig_is_blocked(SIGIO
));
66 assert(sig_is_blocked(SIGIO
));
68 assert(!sig_is_blocked(SIGIO
));
70 /* block twice, nested */
72 assert(sig_is_blocked(SIGIO
));
74 assert(sig_is_blocked(SIGIO
));
76 assert(sig_is_blocked(SIGIO
));
78 assert(!sig_is_blocked(SIGIO
));
82 assert(sig_is_blocked(SIGIO
));
84 assert(!sig_is_blocked(SIGIO
));
86 /* block all nested */
88 assert(sig_is_blocked(SIGIO
));
90 assert(sig_is_blocked(SIGIO
));
92 assert(sig_is_blocked(SIGIO
));
94 assert(!sig_is_blocked(SIGIO
));
99 assert(sig_is_blocked(SIGIO
));
101 assert(sig_is_blocked(SIGIO
));
103 assert(sig_is_blocked(SIGIO
));
105 assert(!sig_is_blocked(SIGIO
));
109 assert(sig_is_blocked(SIGIO
));
111 assert(sig_is_blocked(SIGIO
));
113 assert(sig_is_blocked(SIGIO
));
115 assert(!sig_is_blocked(SIGIO
));
119 assert(sig_is_blocked(SIGIO
));
121 assert(sig_is_blocked(SIGIO
));
123 assert(sig_is_blocked(SIGIO
));
125 assert(!sig_is_blocked(SIGIO
));
129 assert(sig_is_blocked(SIGIO
));
131 assert(sig_is_blocked(SIGIO
));
133 assert(sig_is_blocked(SIGIO
));
135 assert(!sig_is_blocked(SIGIO
));
139 static void block_sigio_test_nested(void)
142 /* Check for bug releasing SIGIO during SIGIO signal handling.
150 tail guard must be hit.
152 void (*old_handler
)(int);
153 old_handler
= signal(SIGIO
, sighandler
);
155 assert(raise(SIGIO
) == 0);
156 assert(signal(SIGIO
, old_handler
) == sighandler
);
161 main(int argc
, char **argv
)
164 block_sigio_test_nested();