]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
reindexdb: move PQfinish() calls to the right place
authorÁlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 6 Mar 2025 17:14:41 +0000 (18:14 +0100)
committerÁlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 6 Mar 2025 18:40:06 +0000 (19:40 +0100)
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

index 665864fd22be0fa659445c6bfcc00435647510df..b00c8112869170f61ea794074456f97f34089668 100644 (file)
@@ -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;
        }