aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/regress/pg_regress.c62
1 files changed, 36 insertions, 26 deletions
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index f859fbc0119..7c628df4b42 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -1593,6 +1593,7 @@ run_schedule(const char *schedule, test_function tfunc)
FILE *scf;
int line_num = 0;
+ memset(tests, 0, sizeof(tests));
memset(resultfiles, 0, sizeof(resultfiles));
memset(expectfiles, 0, sizeof(expectfiles));
memset(tags, 0, sizeof(tags));
@@ -1615,16 +1616,6 @@ run_schedule(const char *schedule, test_function tfunc)
line_num++;
- /* clear out string lists left over from previous line */
- for (i = 0; i < MAX_PARALLEL_TESTS; i++)
- {
- if (resultfiles[i] == NULL)
- break;
- free_stringlist(&resultfiles[i]);
- free_stringlist(&expectfiles[i]);
- free_stringlist(&tags[i]);
- }
-
/* strip trailing whitespace, especially the newline */
i = strlen(scbuf);
while (i > 0 && isspace((unsigned char) scbuf[i - 1]))
@@ -1657,24 +1648,35 @@ run_schedule(const char *schedule, test_function tfunc)
num_tests = 0;
inword = false;
- for (c = test; *c; c++)
+ for (c = test;; c++)
{
- if (isspace((unsigned char) *c))
+ if (*c == '\0' || isspace((unsigned char) *c))
{
- *c = '\0';
- inword = false;
+ if (inword)
+ {
+ /* Reached end of a test name */
+ char sav;
+
+ if (num_tests >= MAX_PARALLEL_TESTS)
+ {
+ fprintf(stderr, _("too many parallel tests (more than %d) in schedule file \"%s\" line %d: %s\n"),
+ MAX_PARALLEL_TESTS, schedule, line_num, scbuf);
+ exit(2);
+ }
+ sav = *c;
+ *c = '\0';
+ tests[num_tests] = pg_strdup(test);
+ num_tests++;
+ *c = sav;
+ inword = false;
+ }
+ if (*c == '\0')
+ break; /* loop exit is here */
}
else if (!inword)
{
- if (num_tests >= MAX_PARALLEL_TESTS)
- {
- /* can't print scbuf here, it's already been trashed */
- fprintf(stderr, _("too many parallel tests (more than %d) in schedule file \"%s\" line %d\n"),
- MAX_PARALLEL_TESTS, schedule, line_num);
- exit(2);
- }
- tests[num_tests] = c;
- num_tests++;
+ /* Start of a test name */
+ test = c;
inword = true;
}
}
@@ -1695,9 +1697,8 @@ run_schedule(const char *schedule, test_function tfunc)
}
else if (max_concurrent_tests > 0 && max_concurrent_tests < num_tests)
{
- /* can't print scbuf here, it's already been trashed */
- fprintf(stderr, _("too many parallel tests (more than %d) in schedule file \"%s\" line %d\n"),
- max_concurrent_tests, schedule, line_num);
+ fprintf(stderr, _("too many parallel tests (more than %d) in schedule file \"%s\" line %d: %s\n"),
+ max_concurrent_tests, schedule, line_num, scbuf);
exit(2);
}
else if (max_connections > 0 && max_connections < num_tests)
@@ -1802,6 +1803,15 @@ run_schedule(const char *schedule, test_function tfunc)
status_end();
}
+
+ for (i = 0; i < num_tests; i++)
+ {
+ pg_free(tests[i]);
+ tests[i] = NULL;
+ free_stringlist(&resultfiles[i]);
+ free_stringlist(&expectfiles[i]);
+ free_stringlist(&tags[i]);
+ }
}
free_stringlist(&ignorelist);