[igt-dev] [PATCH i-g-t] tests/prime_vgem: Fix broken handling of interprocess pipes
Janusz Krzysztofik
janusz.krzysztofik at linux.intel.com
Mon Jul 1 11:28:38 UTC 2019
If a child process dies for any reason while basic-fence-read or
basic-fence-mmap subtest is run, the subtest may hang indefinitely on
read() from a pipe which is supposed to be written to by that child (can
be interrupted though). Fix it by first closing unused pipe ends on both
parent and child side before using the pipe, as recommended by pipe(2)
manual page.
Please note that due to the IGT library way of handling signals, now the
subtests may fail with error code 141 (128 + SIGPIPE) and no usual DEBUG
message block on stderr nor FAIL message line on stdout, however some
meaningful error messages will still be printed on stderr by the failing
child processes.
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
---
tests/prime_vgem.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/tests/prime_vgem.c b/tests/prime_vgem.c
index 69ae8c9b..bebf9edc 100644
--- a/tests/prime_vgem.c
+++ b/tests/prime_vgem.c
@@ -82,6 +82,8 @@ static void test_fence_read(int i915, int vgem)
close(dmabuf);
igt_fork(child, 1) {
+ close(master[0]);
+ close(slave[1]);
for (i = 0; i < 1024; i++) {
uint32_t tmp;
gem_read(i915, handle, 4096*i, &tmp, sizeof(tmp));
@@ -97,6 +99,8 @@ static void test_fence_read(int i915, int vgem)
gem_close(i915, handle);
}
+ close(master[1]);
+ close(slave[0]);
read(master[0], &i, sizeof(i));
fence = vgem_fence_attach(vgem, &scratch, VGEM_FENCE_WRITE);
write(slave[1], &i, sizeof(i));
@@ -110,8 +114,6 @@ static void test_fence_read(int i915, int vgem)
igt_waitchildren();
close(master[0]);
- close(master[1]);
- close(slave[0]);
close(slave[1]);
}
@@ -137,6 +139,8 @@ static void test_fence_mmap(int i915, int vgem)
close(dmabuf);
igt_fork(child, 1) {
+ close(master[0]);
+ close(slave[1]);
ptr = gem_mmap__gtt(i915, handle, 4096*1024, PROT_READ);
gem_set_domain(i915, handle, I915_GEM_DOMAIN_GTT, 0);
@@ -153,6 +157,8 @@ static void test_fence_mmap(int i915, int vgem)
gem_close(i915, handle);
}
+ close(master[1]);
+ close(slave[0]);
read(master[0], &i, sizeof(i));
fence = vgem_fence_attach(vgem, &scratch, VGEM_FENCE_WRITE);
write(slave[1], &i, sizeof(i));
@@ -166,8 +172,6 @@ static void test_fence_mmap(int i915, int vgem)
igt_waitchildren();
close(master[0]);
- close(master[1]);
- close(slave[0]);
close(slave[1]);
}
--
2.21.0
More information about the igt-dev
mailing list