#include "pg_regress.h"
+char saved_argv0[MAXPGPATH];
char isolation_exec[MAXPGPATH];
+bool looked_up_isolation_exec = false;
+
#define PG_ISOLATION_VERSIONSTR "isolationtester (PostgreSQL) " PG_VERSION "\n"
/*
char psql_cmd[MAXPGPATH * 3];
size_t offset = 0;
+ /* need to do the path lookup here, check isolation_init() for details */
+ if (!looked_up_isolation_exec)
+ {
+ /* look for isolationtester binary */
+ if (find_other_exec(saved_argv0, "isolationtester",
+ PG_ISOLATION_VERSIONSTR, isolation_exec) != 0)
+ {
+ fprintf(stderr, _("could not find proper isolationtester binary\n"));
+ exit(2);
+ }
+ looked_up_isolation_exec = true;
+ }
+
/*
* Look for files in the output dir first, consistent with a vpath search.
* This is mainly to create more reasonable error messages if the file is
static void
isolation_init(int argc, char **argv)
{
- /* look for isolationtester binary */
- if (find_other_exec(argv[0], "isolationtester",
- PG_ISOLATION_VERSIONSTR, isolation_exec) != 0)
- {
- fprintf(stderr, _("could not find proper isolationtester binary\n"));
- exit(2);
- }
+ /*
+ * We unfortunately cannot do the find_other_exec() lookup to find the
+ * "isolationtester" binary here. regression_main() calls the
+ * initialization functions before parsing the commandline arguments and
+ * thus hasn't changed the library search path at this point which in turn
+ * can cause the "isolationtester -V" invocation that find_other_exec()
+ * does to fail since it's linked to libpq. So we instead copy argv[0]
+ * and do the lookup the first time through isolation_start_test().
+ */
+ strncpy(saved_argv0, argv[0], MAXPGPATH);
/* set default regression database name */
add_stringlist_item(&dblist, "isolationtest");