diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 1034a1f3c4..5131bd9198 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -200,12 +200,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); @@ -442,6 +436,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); } }