diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 93728a3a969..a4fe5f86294 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -198,12 +198,6 @@ main(int argc, char *argv[]) progname); exit(1); } - if (concurrentCons > FD_SETSIZE - 1) - { - fprintf(stderr, _("%s: too many parallel jobs requested (maximum: %d)\n"), - progname, FD_SETSIZE - 1); - exit(1); - } break; case 2: maintenance_db = pg_strdup(optarg); @@ -437,6 +431,20 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, { conn = connectDatabase(dbname, host, port, username, prompt_password, progname, echo, false, true); + + /* + * Fail and exit immediately if trying to use a socket in an + * unsupported range. POSIX requires open(2) to use the lowest + * unused file descriptor and the hint given relies on that. + */ + if (PQsocket(conn) >= FD_SETSIZE) + { + fprintf(stderr, + _("%s: too many jobs for this platform -- try %d"), + progname, i); + exit(1); + } + init_slot(slots + i, conn); } }