[master] e88a5a3 Make sure the process has TCSAFLUSH'ed before sending anything to it.
Poul-Henning Kamp
phk at FreeBSD.org
Sat Jan 13 01:33:06 UTC 2018
commit e88a5a3c8bf76ed43dbd5f26a1b2b7dae49223cb
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Sat Jan 13 01:31:25 2018 +0000
Make sure the process has TCSAFLUSH'ed before sending anything to it.
diff --git a/bin/varnishtest/vtc_process.c b/bin/varnishtest/vtc_process.c
index 330f403..cf0571a 100644
--- a/bin/varnishtest/vtc_process.c
+++ b/bin/varnishtest/vtc_process.c
@@ -374,6 +374,7 @@ process_start(struct process *p)
int fd2[2];
int master, slave;
const char *slavename;
+ char c;
CHECK_OBJ_NOTNULL(p, PROCESS_MAGIC);
if (p->hasthread)
@@ -396,13 +397,13 @@ process_start(struct process *p)
p->pid = fork();
assert(p->pid >= 0);
if (p->pid == 0) {
- setsid();
+ assert(setsid() == getpid());
assert(dup2(fd2[1], STDERR_FILENO) == STDERR_FILENO);
- close(STDIN_FILENO);
+ AZ(close(STDIN_FILENO));
slave = open(slavename, O_RDWR);
assert(slave == STDIN_FILENO);
- AZ(ioctl(STDIN_FILENO, TIOCSCTTY, 0 ));
- close(STDOUT_FILENO);
+ AZ(ioctl(STDIN_FILENO, TIOCSCTTY, NULL));
+ AZ(close(STDOUT_FILENO));
assert(dup2(slave, STDOUT_FILENO) == STDOUT_FILENO);
VSUB_closefrom(STDERR_FILENO + 1);
#ifdef __sun
@@ -416,12 +417,14 @@ process_start(struct process *p)
AZ(setenv("TERM", "ansi.sys", 1));
AZ(unsetenv("TERMCAP"));
// Not using NULL because GCC is now even more demented...
+ assert(write(STDERR_FILENO, "+", 1) == 1);
AZ(execl("/bin/sh", "/bin/sh", "-c", VSB_data(cl), (char*)0));
exit(1);
}
vtc_log(p->vl, 3, "PID: %ld", (long)p->pid);
VSB_destroy(&cl);
+ assert(read(fd2[0], &c, 1) == 1);
p->fd_term = master;
closefd(&fd2[1]);
p->fd_stderr = fd2[0];
More information about the varnish-commit
mailing list