@@ -3,6 +3,5 @@
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 = 3;
+ unsigned int timeout = 1;
test_ptest_expected_failure(head, timeout, "hang", search_for_timeout_and_duration);
@@ -403,8 +403,7 @@ 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, now;
- time_t timeout_deadline;
+ time_t sttime, entime;
time_t duration;
int slave;
int pgid = -1;
@@ -490,7 +489,6 @@ 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);
@@ -521,17 +519,18 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
if (done) {
break;
}
- now = time(NULL);
- if (now >= timeout_deadline) {
- kill(-child, SIGKILL);
- _child_reader.timeouted = 1;
- break;
- }
- int ret = poll(pfds, 2, (timeout_deadline - now) * 1000);
+ int ret = poll(pfds, 2, _child_reader.timeout*1000);
- if (ret == 0) {
- continue;
+ 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
+ */
+ kill(-child, SIGKILL);
+ _child_reader.timeouted = 1;
}
for (int i = 0; i < 2; i++) {
This reverts commit e50f2175d9c6b8aeb8b0bf687e5cca64a0f6e61a. The timeout is actually the amount of time to wait until there is no output from the test, not the total test time. 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, 12 insertions(+), 14 deletions(-)