0001-Make-sure-that-all-recourses-have-been-released-in-p.patch
text/x-patch
Filename: 0001-Make-sure-that-all-recourses-have-been-released-in-p.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: Make sure that all recourses have been released in parallel autovacuum
| File | + | − |
|---|---|---|
| src/backend/access/transam/parallel.c | 7 | 0 |
| src/backend/commands/vacuumparallel.c | 15 | 0 |
| src/include/access/parallel.h | 3 | 0 |
From b649988718442143256eae59f29b770d08f1fc97 Mon Sep 17 00:00:00 2001
From: Daniil Davidov <d.davydov@postgrespro.ru>
Date: Thu, 2 Apr 2026 22:08:06 +0700
Subject: [PATCH] Make sure that all recourses have been released in parallel
autovacuum
---
src/backend/access/transam/parallel.c | 7 +++++++
src/backend/commands/vacuumparallel.c | 15 +++++++++++++++
src/include/access/parallel.h | 3 +++
3 files changed, 25 insertions(+)
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c
index ab1dfb30e73..81bca48bcfa 100644
--- a/src/backend/access/transam/parallel.c
+++ b/src/backend/access/transam/parallel.c
@@ -1292,6 +1292,13 @@ AtEOXact_Parallel(bool isCommit)
elog(WARNING, "leaked parallel context");
DestroyParallelContext(pcxt);
}
+
+ /*
+ * Parallel autovacuum may have resources that depend on ParallelContext,
+ * but are local to vacuumparallel.c
+ */
+ if (AmAutoVacuumWorkerProcess())
+ AtEOXact_ParallelAutovacuum(isCommit);
}
/*
diff --git a/src/backend/commands/vacuumparallel.c b/src/backend/commands/vacuumparallel.c
index bac3bd28214..68d4a25528d 100644
--- a/src/backend/commands/vacuumparallel.c
+++ b/src/backend/commands/vacuumparallel.c
@@ -541,6 +541,21 @@ parallel_vacuum_end(ParallelVacuumState *pvs, IndexBulkDeleteResult **istats)
pfree(pvs);
}
+/*
+ * End-of-transaction cleanup for parallel autovacuum.
+ */
+void
+AtEOXact_ParallelAutovacuum(bool isCommit)
+{
+ if (pv_shared_cost_params == NULL)
+ return;
+
+ if (isCommit)
+ elog(WARNING, "leaked parallel autovacuum state");
+
+ pv_shared_cost_params = NULL;
+}
+
/*
* Returns the dead items space and dead items information.
*/
diff --git a/src/include/access/parallel.h b/src/include/access/parallel.h
index 60f857675e0..553273b1529 100644
--- a/src/include/access/parallel.h
+++ b/src/include/access/parallel.h
@@ -80,4 +80,7 @@ extern void ParallelWorkerReportLastRecEnd(XLogRecPtr last_xlog_end);
extern void ParallelWorkerMain(Datum main_arg);
+/* vacuumparallel.c */
+extern void AtEOXact_ParallelAutovacuum(bool isCommit);
+
#endif /* PARALLEL_H */
--
2.43.0