From: "U. Artie Eoff" <ullysses.a.e...@intel.com>

Weston check client tests are fork-exec'd by the Weston process
(via the weston-test.so module).  If the Weston process dies, the
client test might not quit in all cases.  This happened in the
subsurface-test described at
https://bugs.freedesktop.org/show_bug.cgi?id=66132 where it went
rogue, eating up 100% cpu.

This does not fix the Weston core-dump issue described in that
bug report.  However, it ensures that the fork-exec'd tests are
killed when its parent process(es) die.

Signed-off-by: U. Artie Eoff <ullysses.a.e...@intel.com>
---
 tests/weston-test-runner.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/tests/weston-test-runner.c b/tests/weston-test-runner.c
index 27ea9e4..15332a6 100644
--- a/tests/weston-test-runner.c
+++ b/tests/weston-test-runner.c
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include <sys/prctl.h>
 #include <string.h>
 #include <assert.h>
 #include <errno.h>
@@ -59,6 +60,9 @@ int main(int argc, char *argv[])
        int total, pass;
        siginfo_t info;
 
+       /* die if parent process dies */
+       prctl(PR_SET_PDEATHSIG, SIGHUP);
+
        if (argc == 2) {
                t = find_test(argv[1]);
                if (t == NULL) {
@@ -77,8 +81,12 @@ int main(int argc, char *argv[])
                pid = fork();
                assert(pid >= 0);
 
-               if (pid == 0)
+               if (pid == 0) {
+                       /* die if parent process dies */
+                       prctl(PR_SET_PDEATHSIG, SIGHUP);
+
                        run_test(t); /* never returns */
+               }
 
                if (waitid(P_ALL, 0, &info, WEXITED)) {
                        fprintf(stderr, "waitid failed: %m\n");
-- 
1.7.11.7

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to