Close replication connection when slot creation errors
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 25 Jan 2017 15:47:53 +0000 (10:47 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 25 Jan 2017 15:47:53 +0000 (10:47 -0500)
From: Petr Jelinek <pjmodos@pjmodos.net>

src/backend/commands/subscriptioncmds.c

index 2b6d3225594381a1c37135b7ede1ad470eb6bca4..e0add949534ea0ccf9b48e0952e2dfd271b30e01 100644 (file)
@@ -301,10 +301,20 @@ CreateSubscription(CreateSubscriptionStmt *stmt)
            ereport(ERROR,
                    (errmsg("could not connect to the publisher: %s", err)));
 
-       walrcv_create_slot(wrconn, slotname, false, &lsn);
-       ereport(NOTICE,
-               (errmsg("created replication slot \"%s\" on publisher",
-                       slotname)));
+       PG_TRY();
+       {
+           walrcv_create_slot(wrconn, slotname, false, &lsn);
+           ereport(NOTICE,
+                   (errmsg("created replication slot \"%s\" on publisher",
+                           slotname)));
+       }
+       PG_CATCH();
+       {
+           /* Close the connection in case of failure. */
+           walrcv_disconnect(wrconn);
+           PG_RE_THROW();
+       }
+       PG_END_TRY();
 
        /* And we are done with the remote side. */
        walrcv_disconnect(wrconn);