Call WaitLSNCleanup() in AbortTransaction()
authorAlexander Korotkov <akorotkov@postgresql.org>
Sat, 6 Apr 2024 21:32:46 +0000 (00:32 +0300)
committerAlexander Korotkov <akorotkov@postgresql.org>
Sat, 6 Apr 2024 21:49:53 +0000 (00:49 +0300)
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

src/backend/access/transam/xact.c

index df5a67e4c3103152e6cadebdfb73f83bb3046406..19777b689566cda14dcdf00ca7251d7f7eee3636 100644 (file)
@@ -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();