]> granicus.if.org Git - postgresql/commitdiff
Fix bug in handling of connections that pg_receivexlog creates.
authorFujii Masao <fujii@postgresql.org>
Fri, 17 Oct 2014 18:06:34 +0000 (03:06 +0900)
committerFujii Masao <fujii@postgresql.org>
Fri, 17 Oct 2014 18:06:34 +0000 (03:06 +0900)
Previously pg_receivexlog created new connection for WAL streaming
even though another connection which had been established to create
or delete the replication slot was being left. This caused the unused
connection to be left uselessly until pg_receivexlog exited.
This bug was introduced by the commit d9f38c7.

This patch changes pg_receivexlog so that the connection for
the replication slot is reused for WAL streaming.

Andres Freund, slightly modified by me, reviewed by Michael Paquier

src/bin/pg_basebackup/pg_receivexlog.c

index 7374cc8eb4d5abf774da757e2e3057a8931ef993..bc0940aeafe7260296d1cda1a4823372078c2427 100644 (file)
@@ -293,7 +293,8 @@ StreamLog(void)
        /*
         * Connect in replication mode to the server
         */
-       conn = GetConnection();
+       if (conn == NULL)
+               conn = GetConnection();
        if (!conn)
                /* Error message already written in GetConnection() */
                return;
@@ -345,6 +346,7 @@ StreamLog(void)
                                          fsync_interval);
 
        PQfinish(conn);
+       conn = NULL;
 }
 
 /*
@@ -591,6 +593,11 @@ main(int argc, char **argv)
                        disconnect_and_exit(1);
        }
 
+       /*
+        * Don't close the connection here so that subsequent StreamLog()
+        * can reuse it.
+        */
+
        while (true)
        {
                StreamLog();