Commit 888cae43 authored by Vladimir Davydov's avatar Vladimir Davydov Committed by Pavel Emelyanov

zdtm/pty02: never close master before reading slave

We may close the master before reading the slave if the child runs first
when the parent wakes it up using task_waiter_complete. In this case the
subsequent read from the slave will return 0 resulting in a false
positive test failure:

13:23:42.194: 30914: ERR: pty02.c:89: read(slave) failed (errno = 11 (Resource temporarily unavailable))

Fix this by waking the child, which closes the master, only after the
read has been completed.

Also note errno = EAGAIN in the failure report above, which looks really
confusing. Let's print the actual number of bytes read/written along
with the errno while reporting a read/write failure to make the error
reporting clearer in this test.
Signed-off-by: 's avatarVladimir Davydov <vdavydov@parallels.com>
Cc: Cyrill Gorcunov <gorcunov@parallels.com>
Acked-by: 's avatarAndrew Vagin <avagin@parallels.com>
Acked-by: 's avatarCyrill Gorcunov <gorcunov@parallels.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent d64a49fd
...@@ -62,7 +62,7 @@ int main(int argc, char *argv[]) ...@@ -62,7 +62,7 @@ int main(int argc, char *argv[])
ret = write(new_master, teststr, sizeof(teststr) - 1); ret = write(new_master, teststr, sizeof(teststr) - 1);
if (ret != sizeof(teststr) - 1) { if (ret != sizeof(teststr) - 1) {
err("write(new_master) failed"); err("write(new_master) failed (ret = %d)", ret);
exit_shot_parent(1); exit_shot_parent(1);
} }
...@@ -82,11 +82,10 @@ int main(int argc, char *argv[]) ...@@ -82,11 +82,10 @@ int main(int argc, char *argv[])
test_waitsig(); test_waitsig();
signal(SIGHUP, SIG_IGN); signal(SIGHUP, SIG_IGN);
task_waiter_complete(&t, 1);
ret = read(slave, buf, sizeof(teststr) - 1); ret = read(slave, buf, sizeof(teststr) - 1);
if (ret != sizeof(teststr) - 1) { if (ret != sizeof(teststr) - 1) {
err("read(slave) failed"); err("read(slave) failed (ret = %d)", ret);
return 1; return 1;
} }
...@@ -95,6 +94,7 @@ int main(int argc, char *argv[]) ...@@ -95,6 +94,7 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
task_waiter_complete(&t, 1);
close(slave); close(slave);
pass(); pass();
......
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