get_parallel_object_list() has no business closing a connection it did
not create. Make things more sensible by closing the connection at the
level where it is created, in reindex_one_database().
Extracted from a larger patch by the same author. However, the patch as
submitted not only was not described as containing this change, but in
addition it contained a fatal flaw whereby reindexdb would crash and
fail across all of its TAP test, which is why I list myself as
co-author.
Author: Ranier Vilela <
[email protected]>
Author: Álvaro Herrera <
[email protected]>
Discussion: https://postgr.es/m/CAEudQArfqr0-s0VVPSEh=0kgOgBJvFNdGW=xSL5rBcr0WDMQYQ@mail.gmail.com
/* Bail out if nothing to process */
if (process_list == NULL)
+ {
+ PQfinish(conn);
return;
+ }
break;
case REINDEX_SCHEMA:
/* Bail out if nothing to process */
if (process_list == NULL)
+ {
+ PQfinish(conn);
return;
+ }
break;
case REINDEX_INDEX:
* in-place, so check if it has at least one cell.
*/
if (user_list->head == NULL)
+ {
+ PQfinish(conn);
return;
+ }
/*
* Assuming 'user_list' is not empty, 'indices_tables_list'
sa = ParallelSlotsSetup(concurrentCons, cparams, progname, echo, NULL);
ParallelSlotsAdoptConn(sa, conn);
+ conn = NULL;
cell = process_list->head;
do
if (ntups == 0)
{
PQclear(res);
- PQfinish(conn);
return NULL;
}