postgres.git / summary / log / commit / refs

commit    24503fa95cd8cd57a8d695a910056a1cfcbacefc
Author:   Álvaro Herrera <alvherre@alvh.no-ip.org>
Date:     Thu Mar 06 17:14:41 2025 +0000
First released in: 18.0

    reindexdb: move PQfinish() calls to the right place
    
    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 <ranier.vf@gmail.com>
    Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
    Discussion: https://postgr.es/m/CAEudQArfqr0-s0VVPSEh=0kgOgBJvFNdGW=xSL5rBcr0WDMQYQ@mail.gmail.com


src/bin/scripts/reindexdb.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c index 665864fd22b..b00c8112869 100644 --- a/src/bin/scripts/reindexdb.c +++ b/src/bin/scripts/reindexdb.c @@ -339,7 +339,10 @@ reindex_one_database(ConnParams *cparams, ReindexType type, /* Bail out if nothing to process */ if (process_list == NULL) + { + PQfinish(conn); return; + } break; case REINDEX_SCHEMA: @@ -352,7 +355,10 @@ reindex_one_database(ConnParams *cparams, ReindexType type, /* Bail out if nothing to process */ if (process_list == NULL) + { + PQfinish(conn); return; + } break; case REINDEX_INDEX: @@ -370,7 +376,10 @@ reindex_one_database(ConnParams *cparams, ReindexType type, * 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' @@ -416,6 +425,7 @@ reindex_one_database(ConnParams *cparams, ReindexType type, sa = ParallelSlotsSetup(concurrentCons, cparams, progname, echo, NULL); ParallelSlotsAdoptConn(sa, conn); + conn = NULL; cell = process_list->head; do @@ -765,7 +775,6 @@ get_parallel_object_list(PGconn *conn, ReindexType type, if (ntups == 0) { PQclear(res); - PQfinish(conn); return NULL; } [parent: 0f21db36d663]