@@ -3,5 +3,6 @@
echo "hang" 1>&2
echo "hang"
while true; do
+ echo "hang"
sleep 1
done
@@ -224,7 +224,7 @@ search_for_timeout_and_duration(const int rp, FILE *fp_stdout)
START_TEST(test_run_timeout_duration_ptest)
{
struct ptest_list *head = get_available_ptests(opts_directory);
- unsigned int timeout = 1;
+ unsigned int timeout = 3;
test_ptest_expected_failure(head, timeout, "hang", search_for_timeout_and_duration);
@@ -403,7 +403,8 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
pid_t child;
int pipefd_stdout[2] = {-1, -1};
int pipefd_stderr[2] = {-1, -1};
- time_t sttime, entime;
+ time_t sttime, entime, now;
+ time_t timeout_deadline;
time_t duration;
int slave;
int pgid = -1;
@@ -489,6 +490,7 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
}
sttime = time(NULL);
+ timeout_deadline = sttime + opts.timeout;
fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, sttime));
fprintf(fp, "BEGIN: %s\n", ptest_dir);
@@ -519,18 +521,17 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
if (done) {
break;
}
-
- int ret = poll(pfds, 2, _child_reader.timeout*1000);
-
- if (ret == 0 && !_child_reader.timeouted) {
- /* kill the child if we haven't
- * already. Note that we
- * continue to read data from
- * the pipes until EOF to make
- * sure we get all the output
- */
+ now = time(NULL);
+ if (now >= timeout_deadline) {
kill(-child, SIGKILL);
_child_reader.timeouted = 1;
+ break;
+ }
+
+ int ret = poll(pfds, 2, (timeout_deadline - now) * 1000);
+
+ if (ret == 0) {
+ continue;
}
for (int i = 0; i < 2; i++) {
Changes the way that tests time out to be the total elapsed time for the test, not just the time between receiving output from the test. This matches the implementation before 8259375 ("runner: Remove threads and mutexes"). Also update the timeout test case to test for this correctly. Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> --- tests/data/hang/ptest/run-ptest | 1 + tests/utils.c | 2 +- utils.c | 23 ++++++++++++----------- 3 files changed, 14 insertions(+), 12 deletions(-)