Commit 835e252b authored by Andrei Vagin's avatar Andrei Vagin

test/ptrace_sig: wait children before calling test_daemon

A static test has to do nothing after test_daemon().
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent a31c1854
...@@ -59,8 +59,8 @@ int main(int argc, char ** argv) ...@@ -59,8 +59,8 @@ int main(int argc, char ** argv)
{ {
int ret, status = 0; int ret, status = 0;
pid_t pid, spid, cpid; pid_t pid, spid, cpid;
int signal_pipe[2];
int child_pipe[2]; int child_pipe[2];
siginfo_t siginfo;
test_init(argc, argv); test_init(argc, argv);
...@@ -81,9 +81,10 @@ int main(int argc, char ** argv) ...@@ -81,9 +81,10 @@ int main(int argc, char ** argv)
} }
close(child_pipe[1]); close(child_pipe[1]);
ret = pipe(signal_pipe); test_msg("wait while child initialized");
if (ret < 0) { ret = read(child_pipe[0], &status, sizeof(status));
pr_perror("pipe failed"); if (ret != sizeof(status)) {
pr_perror("read from child process failed");
return 1; return 1;
} }
...@@ -92,12 +93,6 @@ int main(int argc, char ** argv) ...@@ -92,12 +93,6 @@ int main(int argc, char ** argv)
pr_perror("Can't fork signal process"); pr_perror("Can't fork signal process");
return 1; return 1;
} else if (spid == 0) { } else if (spid == 0) {
close(signal_pipe[1]);
ret = read(signal_pipe[0], &status, sizeof(status));
if (ret != sizeof(status)) {
pr_perror("read");
return 1;
}
test_msg("send signal to %d\n", cpid); test_msg("send signal to %d\n", cpid);
ret = kill(cpid, SIGUSR2); ret = kill(cpid, SIGUSR2);
if (ret < 0) { if (ret < 0) {
...@@ -105,20 +100,15 @@ int main(int argc, char ** argv) ...@@ -105,20 +100,15 @@ int main(int argc, char ** argv)
} }
return 0; return 0;
} }
close(signal_pipe[0]);
test_msg("wait while child initialized"); if (waitid(P_PID, spid, &siginfo, WEXITED | WNOWAIT)) {
ret = read(child_pipe[0], &status, sizeof(status)); pr_perror("Unable to wait spid");
if (ret != sizeof(status)) {
pr_perror("read from child process failed");
return 1; return 1;
} }
if (waitid(P_PID, cpid, &siginfo, WSTOPPED | WNOWAIT)) {
ret = write(signal_pipe[1], &status, sizeof(status)); pr_perror("Unable to wait cpid");
if (ret != sizeof(status)) { return 1;
pr_perror("write to signal process failed");
} }
close(signal_pipe[1]);
test_daemon(); test_daemon();
test_waitsig(); test_waitsig();
...@@ -133,7 +123,6 @@ int main(int argc, char ** argv) ...@@ -133,7 +123,6 @@ int main(int argc, char ** argv)
} }
if (WIFSTOPPED(status)) { if (WIFSTOPPED(status)) {
siginfo_t siginfo;
test_msg("pid=%d stopsig=%d\n", pid, WSTOPSIG(status)); test_msg("pid=%d stopsig=%d\n", pid, WSTOPSIG(status));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment