diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2024-04-07 00:32:46 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2024-04-07 00:49:53 +0300 |
commit | 74eaf66f988c868deb0816bae4dd184eedae1448 (patch) | |
tree | 97642e0130713e12cffe00c899d7d7b957a8c8c7 /src | |
parent | ee79928441e7e291532b833455ebfee27d7cab5c (diff) | |
download | postgresql-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.c | 6 |
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(); |