mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-29 01:11:56 +02:00
Fix connection leak in DROP SUBSCRIPTION command, take 2.
Commit 898a792eb8
fixed the connection
leak issue, but it was an unreliable way of bugfix. This bugfix was
assuming that walrcv_command() subroutine cannot throw an error,
but it's untenable assumption. For example, if it will be changed
so that an error is thrown, connection leak issue will happen again.
This patch ensures that the connection is closed even when
walrcv_command() subroutine throws an error.
Patch by me, reviewed by Petr Jelinek and Michael Paquier
Discussion: https://www.postgresql.org/message-id/2058.1487704345@sss.pgh.pa.us
This commit is contained in:
parent
044d9efb6c
commit
77d21970ae
@ -565,19 +565,25 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel)
|
||||
"drop the replication slot \"%s\"", slotname),
|
||||
errdetail("The error was: %s", err)));
|
||||
|
||||
if (!walrcv_command(wrconn, cmd.data, &err))
|
||||
PG_TRY();
|
||||
{
|
||||
/* Close the connection in case of failure */
|
||||
walrcv_disconnect(wrconn);
|
||||
if (!walrcv_command(wrconn, cmd.data, &err))
|
||||
ereport(ERROR,
|
||||
(errmsg("could not drop the replication slot \"%s\" on publisher",
|
||||
slotname),
|
||||
errdetail("The error was: %s", err)));
|
||||
}
|
||||
else
|
||||
ereport(NOTICE,
|
||||
(errmsg("dropped replication slot \"%s\" on publisher",
|
||||
slotname)));
|
||||
}
|
||||
PG_CATCH();
|
||||
{
|
||||
/* Close the connection in case of failure */
|
||||
walrcv_disconnect(wrconn);
|
||||
PG_RE_THROW();
|
||||
}
|
||||
PG_END_TRY();
|
||||
|
||||
walrcv_disconnect(wrconn);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user