Tweaks for sigqueue tests:
- slightly adjust code for style, sort headers. - in sigqtest2, print received signals, to make it easy to see why test failed. - in sigqtest2, job_control_test(), cover a race by adding sleep after child stopped itself to allow for SIGCHLD due to stop and exit to not be coalesced. MFC after: 2 weeks
This commit is contained in:
parent
6b286ee8b5
commit
eb9de28f20
@ -1,12 +1,14 @@
|
||||
/* $FreeBSD$ */
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int received;
|
||||
|
||||
void handler(int sig, siginfo_t *si, void *ctx)
|
||||
void
|
||||
handler(int sig, siginfo_t *si, void *ctx)
|
||||
{
|
||||
if (si->si_code != SI_QUEUE)
|
||||
errx(1, "si_code != SI_QUEUE");
|
||||
@ -15,7 +17,8 @@ void handler(int sig, siginfo_t *si, void *ctx)
|
||||
received++;
|
||||
}
|
||||
|
||||
int main()
|
||||
int
|
||||
main()
|
||||
{
|
||||
struct sigaction sa;
|
||||
union sigval val;
|
||||
|
@ -1,24 +1,29 @@
|
||||
/* $FreeBSD$ */
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int stop_received;
|
||||
int exit_received;
|
||||
int cont_received;
|
||||
|
||||
void job_handler(int sig, siginfo_t *si, void *ctx)
|
||||
void
|
||||
job_handler(int sig, siginfo_t *si, void *ctx)
|
||||
{
|
||||
int status;
|
||||
int ret;
|
||||
|
||||
if (si->si_code == CLD_STOPPED) {
|
||||
printf("%d: stop received\n", si->si_pid);
|
||||
stop_received = 1;
|
||||
kill(si->si_pid, SIGCONT);
|
||||
} else if (si->si_code == CLD_EXITED) {
|
||||
printf("%d: exit received\n", si->si_pid);
|
||||
ret = waitpid(si->si_pid, &status, 0);
|
||||
if (ret == -1)
|
||||
errx(1, "waitpid");
|
||||
@ -26,11 +31,13 @@ void job_handler(int sig, siginfo_t *si, void *ctx)
|
||||
errx(1, "!WIFEXITED(status)");
|
||||
exit_received = 1;
|
||||
} else if (si->si_code == CLD_CONTINUED) {
|
||||
printf("%d: cont received\n", si->si_pid);
|
||||
cont_received = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void job_control_test()
|
||||
void
|
||||
job_control_test(void)
|
||||
{
|
||||
struct sigaction sa;
|
||||
pid_t pid;
|
||||
@ -43,9 +50,12 @@ void job_control_test()
|
||||
stop_received = 0;
|
||||
cont_received = 0;
|
||||
exit_received = 0;
|
||||
fflush(stdout);
|
||||
pid = fork();
|
||||
if (pid == 0) {
|
||||
printf("child %d\n", getpid());
|
||||
kill(getpid(), SIGSTOP);
|
||||
sleep(2);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -60,11 +70,13 @@ void job_control_test()
|
||||
printf("job control test OK.\n");
|
||||
}
|
||||
|
||||
void rtsig_handler(int sig, siginfo_t *si, void *ctx)
|
||||
void
|
||||
rtsig_handler(int sig, siginfo_t *si, void *ctx)
|
||||
{
|
||||
}
|
||||
|
||||
int main()
|
||||
int
|
||||
main()
|
||||
{
|
||||
struct sigaction sa;
|
||||
sigset_t set;
|
||||
|
Loading…
x
Reference in New Issue
Block a user