pg_log_error("number of parallel jobs must be at least 1");
exit(1);
}
- if (concurrentCons > ParallelSlotsMax())
- {
- pg_log_error("too many parallel jobs requested (maximum: %d)",
- ParallelSlotsMax());
- exit(1);
- }
break;
case 'v':
verbose = true;
return i;
}
-/*
- * ParallelSlotsMax
- * Returns the maximum number of parallel slots supported.
- *
- * Note that this is included here as FD_SETSIZE is declared in sys/select.h
- * per POSIX.
- */
-int
-ParallelSlotsMax(void)
-{
- /* leave some room for pre-existing fds */
- return FD_SETSIZE - 10;
-}
-
/*
* ParallelSlotsGetIdle
* Return a connection slot that is ready to execute a command.
{
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)
+ {
+ pg_log_fatal("too many jobs for this platform -- try %d", i);
+ exit(1);
+ }
+
init_slot(slots + i, conn);
}
}
bool isFree; /* Is it known to be idle? */
} ParallelSlot;
-extern int ParallelSlotsMax(void);
-
extern ParallelSlot *ParallelSlotsGetIdle(ParallelSlot *slots, int numslots);
extern ParallelSlot *ParallelSlotsSetup(const char *dbname, const char *host,
pg_log_error("number of parallel jobs must be at least 1");
exit(1);
}
- if (concurrentCons > ParallelSlotsMax())
- {
- pg_log_error("too many parallel jobs requested (maximum: %d)",
- ParallelSlotsMax());
- exit(1);
- }
break;
case 2:
maintenance_db = pg_strdup(optarg);