From 9a80a352a9d0c4ea09de7bb370267672c32771f2 Mon Sep 17 00:00:00 2001 From: Randy MacLeod Date: Thu, 1 Aug 2019 16:36:48 -0400 Subject: ptest-runner: update from 2.3.1 to 2.3.2 All local patches are now upstream so they have been dropped. Other upstream commits make ptest-runner build using: clang -Weverything $ git log --oneline b73bd54..7015e91 7015e91 (HEAD -> oe-core-master, tag: v2.3.2, origin/master, origin/HEAD, master) Fix additional warnings when using clang dd1daa8 tests: fix clang warnings. 15fd131 main code: fix clang warnings 59381a6 utils: ensure child can be session leader 5fe2c0a utils: Ensure pipes are read after exit 79a9c27 use process groups when spawning b73bd54 utils: Ensure stdout/stderr are flushed Signed-off-by: Randy MacLeod Signed-off-by: Richard Purdie --- ...01-utils-Ensure-stdout-stderr-are-flushed.patch | 45 ----- .../0002-use-process-groups-when-spawning.patch | 35 ---- ...03-utils-Ensure-pipes-are-read-after-exit.patch | 76 -------- ...-utils-ensure-child-can-be-session-leader.patch | 212 --------------------- .../ptest-runner/ptest-runner_2.3.1.bb | 32 ---- .../ptest-runner/ptest-runner_2.3.2.bb | 28 +++ 6 files changed, 28 insertions(+), 400 deletions(-) delete mode 100644 meta/recipes-support/ptest-runner/ptest-runner/0001-utils-Ensure-stdout-stderr-are-flushed.patch delete mode 100644 meta/recipes-support/ptest-runner/ptest-runner/0002-use-process-groups-when-spawning.patch delete mode 100644 meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch delete mode 100644 meta/recipes-support/ptest-runner/ptest-runner/0004-utils-ensure-child-can-be-session-leader.patch delete mode 100644 meta/recipes-support/ptest-runner/ptest-runner_2.3.1.bb create mode 100644 meta/recipes-support/ptest-runner/ptest-runner_2.3.2.bb (limited to 'meta') diff --git a/meta/recipes-support/ptest-runner/ptest-runner/0001-utils-Ensure-stdout-stderr-are-flushed.patch b/meta/recipes-support/ptest-runner/ptest-runner/0001-utils-Ensure-stdout-stderr-are-flushed.patch deleted file mode 100644 index c9a9dd7cf4..0000000000 --- a/meta/recipes-support/ptest-runner/ptest-runner/0001-utils-Ensure-stdout-stderr-are-flushed.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 9b36993794c1de733c521b2477370c874c07b617 Mon Sep 17 00:00:00 2001 -From: Richard Purdie -Date: Thu, 4 Apr 2019 14:18:55 +0100 -Subject: [PATCH 1/3] utils: Ensure stdout/stderr are flushed - -There is no guarantee that the data written with fwrite will be flushed to the -buffer. If stdout and stderr are the same thing, this could lead to interleaved -writes. The common case is stdout output so flush the output pipes when writing to -stderr. Also flush stdout before the function returns. - -Signed-off-by: Richard Purdie -Upstream-Status: Pending [code being tested] ---- - utils.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/utils.c b/utils.c -index 504df0b..3ceb342 100644 ---- a/utils.c -+++ b/utils.c -@@ -295,8 +295,11 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, - } - - if (pfds[1].revents != 0) { -- while ((n = read(fds[1], buf, WAIT_CHILD_BUF_MAX_SIZE)) > 0) -+ while ((n = read(fds[1], buf, WAIT_CHILD_BUF_MAX_SIZE)) > 0) { -+ fflush(fps[0]); - fwrite(buf, n, 1, fps[1]); -+ fflush(fps[1]); -+ } - } - - clock_gettime(clock, &sentinel); -@@ -315,7 +318,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, - break; - } - -- -+ fflush(fps[0]); - return status; - } - --- -2.17.1 - diff --git a/meta/recipes-support/ptest-runner/ptest-runner/0002-use-process-groups-when-spawning.patch b/meta/recipes-support/ptest-runner/ptest-runner/0002-use-process-groups-when-spawning.patch deleted file mode 100644 index 5436a3340c..0000000000 --- a/meta/recipes-support/ptest-runner/ptest-runner/0002-use-process-groups-when-spawning.patch +++ /dev/null @@ -1,35 +0,0 @@ -From f0c42a65633341ad048718c7a6dbd035818e9eaf Mon Sep 17 00:00:00 2001 -From: Richard Purdie -Date: Thu, 4 Apr 2019 14:20:31 +0100 -Subject: [PATCH 2/3] use process groups when spawning - -Rather than just killing the process we've swawned, set the process group -for spawned children and then kill the group of processes. - -Signed-off-by: Richard Purdie -Upstream-Status: Pending [code being tested] ---- - utils.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/utils.c b/utils.c -index 3ceb342..c5b3b8d 100644 ---- a/utils.c -+++ b/utils.c -@@ -309,7 +309,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, - clock_gettime(clock, &time); - if ((time.tv_sec - sentinel.tv_sec) > timeout) { - *timeouted = 1; -- kill(pid, SIGKILL); -+ kill(-pid, SIGKILL); - waitflags = 0; - } - } -@@ -371,6 +371,7 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - rc = -1; - break; - } else if (child == 0) { -+ setsid(); - run_child(p->run_ptest, pipefd_stdout[1], pipefd_stderr[1]); - } else { - int status; diff --git a/meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch b/meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch deleted file mode 100644 index f7c3ebe6f2..0000000000 --- a/meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch +++ /dev/null @@ -1,76 +0,0 @@ -From e58e4e1a7f854953f823dc5135d35f728f253f31 Mon Sep 17 00:00:00 2001 -From: Richard Purdie -Date: Thu, 4 Apr 2019 14:24:14 +0100 -Subject: [PATCH 3/3] utils: Ensure pipes are read after exit - -There was a race in the code where the pipes may not be read after the process has exited -and data may be left behind in them. This change to ordering ensures the pipes are read -after the exit code has been read meaning no data can be left behind and the logs should -be complete. - -Signed-off-by: Richard Purdie -Upstream-Status: Pending [code being tested] ---- - utils.c | 29 ++++++++++++++++------------- - 1 file changed, 16 insertions(+), 13 deletions(-) - -diff --git a/utils.c b/utils.c -index c5b3b8d..37e88ab 100644 ---- a/utils.c -+++ b/utils.c -@@ -264,6 +264,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, pid_t group, - struct pollfd pfds[2]; - struct timespec sentinel; - clockid_t clock = CLOCK_MONOTONIC; -+ int looping = 1; - int r; - - int status; -@@ -281,9 +282,23 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, pid_t group, - - *timeouted = 0; - -- while (1) { -+ while (looping) { - waitflags = WNOHANG; - -+ if (timeout >= 0) { -+ struct timespec time; -+ -+ clock_gettime(clock, &time); -+ if ((time.tv_sec - sentinel.tv_sec) > timeout) { -+ *timeouted = 1; -+ kill(-pid, SIGKILL); -+ waitflags = 0; -+ } -+ } -+ -+ if (waitpid(pid, &status, waitflags) == pid) -+ looping = 0; -+ - r = poll(pfds, 2, WAIT_CHILD_POLL_TIMEOUT_MS); - if (r > 0) { - char buf[WAIT_CHILD_BUF_MAX_SIZE]; -@@ -303,19 +318,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, pid_t group, - } - - clock_gettime(clock, &sentinel); -- } else if (timeout >= 0) { -- struct timespec time; -- -- clock_gettime(clock, &time); -- if ((time.tv_sec - sentinel.tv_sec) > timeout) { -- *timeouted = 1; -- kill(-pid, SIGKILL); -- waitflags = 0; -- } - } -- -- if (waitpid(pid, &status, waitflags) == pid) -- break; - } - - fflush(fps[0]); --- -2.17.1 - diff --git a/meta/recipes-support/ptest-runner/ptest-runner/0004-utils-ensure-child-can-be-session-leader.patch b/meta/recipes-support/ptest-runner/ptest-runner/0004-utils-ensure-child-can-be-session-leader.patch deleted file mode 100644 index 13b4cbc7fb..0000000000 --- a/meta/recipes-support/ptest-runner/ptest-runner/0004-utils-ensure-child-can-be-session-leader.patch +++ /dev/null @@ -1,212 +0,0 @@ -From 79698d3205dedba887e0d2492de945d3079de029 Mon Sep 17 00:00:00 2001 -From: Randy MacLeod -Date: Thu, 6 Jun 2019 17:03:50 -0400 -Subject: [PATCH] utils: ensure child can be session leader - -When running the run-execscript bash ptest as a user rather than root, a warning: - bash: cannot set terminal process group (16036): Inappropriate ioctl for device - bash: no job control in this shell -contaminates the bash log files causing the test to fail. This happens only -when run under ptest-runner and not when interactively testing! - -The changes made to fix this include: -1. Get the process group id (pgid) before forking, -2. Set the pgid in both the parent and child to avoid a race, -3. Find, open and set permission on the child tty, and -4. Allow the child to attach to controlling tty. - -Also add '-lutil' to Makefile. This lib is from libc and provides openpty. - -Upstream-Status: Submitted [yocto@yoctoproject.org] - -Signed-off-by: Sakib Sajal -Signed-off-by: Randy MacLeod ---- - Makefile | 2 +- - utils.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++------ - 2 files changed, 92 insertions(+), 12 deletions(-) - -diff --git a/Makefile b/Makefile -index 1bde7be..439eb79 100644 ---- a/Makefile -+++ b/Makefile -@@ -29,7 +29,7 @@ TEST_DATA=$(shell echo `pwd`/tests/data) - all: $(SOURCES) $(EXECUTABLE) - - $(EXECUTABLE): $(OBJECTS) -- $(CC) $(LDFLAGS) $(OBJECTS) -o $@ -+ $(CC) $(LDFLAGS) $(OBJECTS) -lutil -o $@ - - tests: $(TEST_SOURCES) $(TEST_EXECUTABLE) - -diff --git a/utils.c b/utils.c -index ad737c2..f11ce39 100644 ---- a/utils.c -+++ b/utils.c -@@ -1,5 +1,6 @@ - /** - * Copyright (c) 2016 Intel Corporation -+ * Copyright (C) 2019 Wind River Systems, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License -@@ -22,23 +23,27 @@ - */ - - #define _GNU_SOURCE -+ - #include - -+#include -+#include -+#include -+#include - #include --#include - #include --#include -+#include -+#include -+#include -+#include - #include --#include -+#include -+ -+#include - #include -+#include - #include - #include --#include --#include --#include --#include -- --#include - - #include "ptest_list.h" - #include "utils.h" -@@ -346,6 +351,53 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, - return status; - } - -+/* Returns an integer file descriptor. -+ * If it returns < 0, an error has occurred. -+ * Otherwise, it has returned the slave pty file descriptor. -+ * fp should be writable, likely stdout/err. -+ */ -+static int -+setup_slave_pty(FILE *fp) { -+ int pty_master = -1; -+ int pty_slave = -1; -+ char pty_name[256]; -+ struct group *gptr; -+ gid_t gid; -+ int slave = -1; -+ -+ if (openpty(&pty_master, &pty_slave, pty_name, NULL, NULL) < 0) { -+ fprintf(fp, "ERROR: openpty() failed with: %s.\n", strerror(errno)); -+ return -1; -+ } -+ -+ if ((gptr = getgrnam(pty_name)) != 0) { -+ gid = gptr->gr_gid; -+ } else { -+ /* If the tty group does not exist, don't change the -+ * group on the slave pty, only the owner -+ */ -+ gid = -1; -+ } -+ -+ /* chown/chmod the corresponding pty, if possible. -+ * This will only work if the process has root permissions. -+ */ -+ if (chown(pty_name, getuid(), gid) != 0) { -+ fprintf(fp, "ERROR; chown() failed with: %s.\n", strerror(errno)); -+ } -+ -+ /* Makes the slave read/writeable for the user. */ -+ if (chmod(pty_name, S_IRUSR|S_IWUSR) != 0) { -+ fprintf(fp, "ERROR: chmod() failed with: %s.\n", strerror(errno)); -+ } -+ -+ if ((slave = open(pty_name, O_RDWR)) == -1) { -+ fprintf(fp, "ERROR: open() failed with: %s.\n", strerror(errno)); -+ } -+ return (slave); -+} -+ -+ - int - run_ptests(struct ptest_list *head, const struct ptest_options opts, - const char *progname, FILE *fp, FILE *fp_stderr) -@@ -362,6 +414,8 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - int timeouted; - time_t sttime, entime; - int duration; -+ int slave; -+ int pgid = -1; - - if (opts.xml_filename) { - xh = xml_create(ptest_list_length(head), opts.xml_filename); -@@ -379,7 +433,6 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - close(pipefd_stdout[1]); - break; - } -- - fprintf(fp, "START: %s\n", progname); - PTEST_LIST_ITERATE_START(head, p); - char *ptest_dir = strdup(p->run_ptest); -@@ -388,6 +441,13 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - break; - } - dirname(ptest_dir); -+ if (ioctl(0, TIOCNOTTY) == -1) { -+ fprintf(fp, "ERROR: Unable to detach from controlling tty, %s\n", strerror(errno)); -+ } -+ -+ if ((pgid = getpgid(0)) == -1) { -+ fprintf(fp, "ERROR: getpgid() failed, %s\n", strerror(errno)); -+ } - - child = fork(); - if (child == -1) { -@@ -395,13 +455,33 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - rc = -1; - break; - } else if (child == 0) { -- setsid(); -+ close(0); -+ if ((slave = setup_slave_pty(fp)) < 0) { -+ fprintf(fp, "ERROR: could not setup pty (%d).", slave); -+ } -+ if (setpgid(0,pgid) == -1) { -+ fprintf(fp, "ERROR: setpgid() failed, %s\n", strerror(errno)); -+ } -+ -+ if (setsid() == -1) { -+ fprintf(fp, "ERROR: setsid() failed, %s\n", strerror(errno)); -+ } -+ -+ if (ioctl(0, TIOCSCTTY, NULL) == -1) { -+ fprintf(fp, "ERROR: Unable to attach to controlling tty, %s\n", strerror(errno)); -+ } -+ - run_child(p->run_ptest, pipefd_stdout[1], pipefd_stderr[1]); -+ - } else { - int status; - int fds[2]; fds[0] = pipefd_stdout[0]; fds[1] = pipefd_stderr[0]; - FILE *fps[2]; fps[0] = fp; fps[1] = fp_stderr; - -+ if (setpgid(child, pgid) == -1) { -+ fprintf(fp, "ERROR: setpgid() failed, %s\n", strerror(errno)); -+ } -+ - sttime = time(NULL); - fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, sttime)); - fprintf(fp, "BEGIN: %s\n", ptest_dir); --- -2.17.0 - diff --git a/meta/recipes-support/ptest-runner/ptest-runner_2.3.1.bb b/meta/recipes-support/ptest-runner/ptest-runner_2.3.1.bb deleted file mode 100644 index dec60fcc9b..0000000000 --- a/meta/recipes-support/ptest-runner/ptest-runner_2.3.1.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "A C program to run all installed ptests" -DESCRIPTION = "The ptest-runner2 package installs a ptest-runner \ -program which loops through all installed ptest test suites and \ -runs them in sequence." -HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/ptest-runner2/about/" - -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe" - -SRCREV = "63d097cc46142157931682fed076b5407757a0bd" -PV = "2.3.1+git${SRCPV}" - -SRC_URI = "git://git.yoctoproject.org/ptest-runner2 \ - file://0001-utils-Ensure-stdout-stderr-are-flushed.patch \ - file://0002-use-process-groups-when-spawning.patch \ - file://0003-utils-Ensure-pipes-are-read-after-exit.patch \ - file://0004-utils-ensure-child-can-be-session-leader.patch \ -" - -S = "${WORKDIR}/git" - -FILES_${PN} = "${bindir}/ptest-runner" - -EXTRA_OEMAKE = "-e MAKEFLAGS= CFLAGS="${CFLAGS} -DDEFAULT_DIRECTORY=\\\"${libdir}\\\""" - -do_compile () { - oe_runmake -} - -do_install () { - install -D -m 0755 ${S}/ptest-runner ${D}${bindir}/ptest-runner -} diff --git a/meta/recipes-support/ptest-runner/ptest-runner_2.3.2.bb b/meta/recipes-support/ptest-runner/ptest-runner_2.3.2.bb new file mode 100644 index 0000000000..187f22df04 --- /dev/null +++ b/meta/recipes-support/ptest-runner/ptest-runner_2.3.2.bb @@ -0,0 +1,28 @@ +SUMMARY = "A C program to run all installed ptests" +DESCRIPTION = "The ptest-runner2 package installs a ptest-runner \ +program which loops through all installed ptest test suites and \ +runs them in sequence." +HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/ptest-runner2/about/" + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe" + +SRCREV = "7015e9199ce748c0717addeebe7a8c47448bab03" +PV = "2.3.2+git${SRCPV}" + +SRC_URI = "git://git.yoctoproject.org/ptest-runner2 \ +" + +S = "${WORKDIR}/git" + +FILES_${PN} = "${bindir}/ptest-runner" + +EXTRA_OEMAKE = "-e MAKEFLAGS= CFLAGS="${CFLAGS} -DDEFAULT_DIRECTORY=\\\"${libdir}\\\""" + +do_compile () { + oe_runmake +} + +do_install () { + install -D -m 0755 ${S}/ptest-runner ${D}${bindir}/ptest-runner +} -- cgit 1.2.3-korg