Fix sigsuspend and add it to the sigqueue test.

This commit is contained in:
4lDO2
2024-08-04 23:02:04 +02:00
parent 9701e9c544
commit 2b7a1ea94b
6 changed files with 69 additions and 24 deletions
+25 -7
View File
@@ -24,11 +24,11 @@ void validate(int sig, const siginfo_t *info) {
}
void action(int sig, siginfo_t *info, void *context) {
num++;
(void)context;
assert(context != NULL);
validate(sig, info);
write(1, "action\n", 7);
num++;
}
int main(void) {
@@ -40,12 +40,6 @@ int main(void) {
parent = getpid();
assert(parent != 0);
int child = fork();
ERROR_IF(fork, child, == -1);
status = close(fds[child == 0 ? 0 : 1]);
ERROR_IF(close, status, == -1);
sigset_t set, mask;
status = sigfillset(&mask);
ERROR_IF(sigfillset, status, == -1);
@@ -67,6 +61,16 @@ int main(void) {
status = sigaddset(&set, THE_SIG);
ERROR_IF(sigaddset, status, == -1);
sigset_t empty_set;
status = sigemptyset(&empty_set);
ERROR_IF(sigemptyset, status, == -1);
int child = fork();
ERROR_IF(fork, child, == -1);
status = close(fds[child == 0 ? 0 : 1]);
ERROR_IF(close, status, == -1);
struct sigaction sa;
memcpy(&sa.sa_mask, &set, sizeof (sigset_t));
sa.sa_flags = SA_SIGINFO;
@@ -84,6 +88,20 @@ int main(void) {
validate(THE_SIG, &info);
assert(num == 0); // ensure no signal handler ran
num++;
// TODO: check status
status = sigsuspend(&empty_set);
if (status == -1) {
perror("error in sigsuspend");
puts("[EINTR] is usually expected");
}
assert(num == 2); // ensure signal handler ran
status = sigprocmask(SIG_SETMASK, &empty_set, NULL);
ERROR_IF(sigprocmask, status, == -1);
while (num < 31) {}
status = write(fds[1], "A", 1);