aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Korotkov <akorotkov@postgresql.org>2024-04-07 00:32:46 +0300
committerAlexander Korotkov <akorotkov@postgresql.org>2024-04-07 00:49:53 +0300
commit74eaf66f988c868deb0816bae4dd184eedae1448 (patch)
tree97642e0130713e12cffe00c899d7d7b957a8c8c7 /src
parentee79928441e7e291532b833455ebfee27d7cab5c (diff)
downloadpostgresql-74eaf66f988c868deb0816bae4dd184eedae1448.tar.gz
postgresql-74eaf66f988c868deb0816bae4dd184eedae1448.zip
Call WaitLSNCleanup() in AbortTransaction()
Even though waiting for replay LSN happens without explicit transaction, AbortTransaction() is responsible for the cleanup of the shared memory if the error is thrown in a stored procedure. So, we need to do WaitLSNCleanup() there to clean up after some unexpected error happened while waiting for replay LSN. Discussion: https://postgr.es/m/202404051815.eri4u5q6oj26%40alvherre.pgsql Author: Alvaro Herrera
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/xact.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index df5a67e4c31..19777b68956 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -38,6 +38,7 @@
#include "commands/async.h"
#include "commands/tablecmds.h"
#include "commands/trigger.h"
+#include "commands/waitlsn.h"
#include "common/pg_prng.h"
#include "executor/spi.h"
#include "libpq/be-fsstubs.h"
@@ -2771,6 +2772,11 @@ AbortTransaction(void)
*/
LWLockReleaseAll();
+ /*
+ * Cleanup waiting for LSN if any.
+ */
+ WaitLSNCleanup();
+
/* Clear wait information and command progress indicator */
pgstat_report_wait_end();
pgstat_progress_end_command();