v22--v23-diff-for-0003.patch
text/x-patch
Filename: v22--v23-diff-for-0003.patch
Type: text/x-patch
Part: 6
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 v22-0001
Subject: fixes for 0003 patch
| File | + | − |
|---|---|---|
| src/backend/commands/vacuumparallel.c | 13 | 10 |
From 57a2f96d489fe9c2b81b0310d7b9efcdd45460bc Mon Sep 17 00:00:00 2001
From: Daniil Davidov <d.davydov@postgrespro.ru>
Date: Sat, 28 Feb 2026 18:36:08 +0700
Subject: [PATCH 1/3] fixes for 0003 patch
---
src/backend/commands/vacuumparallel.c | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/src/backend/commands/vacuumparallel.c b/src/backend/commands/vacuumparallel.c
index 0ee4019f561..80b57bf9da3 100644
--- a/src/backend/commands/vacuumparallel.c
+++ b/src/backend/commands/vacuumparallel.c
@@ -74,13 +74,6 @@ typedef struct VacuumCostParams
(cost_params)->cost_page_hit = VacuumCostPageHit; \
(cost_params)->cost_page_miss = VacuumCostPageMiss
-#define VacCostParamsEquals(params) \
- (vacuum_cost_delay == (params).cost_delay && \
- vacuum_cost_limit == (params).cost_limit && \
- VacuumCostPageDirty == (params).cost_page_dirty && \
- VacuumCostPageHit == (params).cost_page_hit && \
- VacuumCostPageMiss == (params).cost_page_miss)
-
/*
* Struct for cost-based vacuum delay related parameters to share among an
* autovacuum worker and its parallel vacuum workers.
@@ -669,24 +662,34 @@ parallel_vacuum_update_shared_delay_params(void)
void
parallel_vacuum_propagate_shared_delay_params(void)
{
+ VacuumCostParams *params_data;
+
Assert(AmAutoVacuumWorkerProcess());
/* Check whether we are running parallel autovacuum */
if (pv_shared_cost_params == NULL)
return;
- SpinLockAcquire(&pv_shared_cost_params->mutex);
+ /*
+ * Only leader worker can modify this shared structure, so we can read it
+ * without acquiring a lock.
+ */
+ params_data = &pv_shared_cost_params->params_data;
- if (VacCostParamsEquals(pv_shared_cost_params->params_data))
+ if (vacuum_cost_delay == params_data->cost_delay &&
+ vacuum_cost_limit == params_data->cost_limit &&
+ VacuumCostPageDirty == params_data->cost_page_dirty &&
+ VacuumCostPageHit == params_data->cost_page_hit &&
+ VacuumCostPageMiss == params_data->cost_page_miss)
{
/*
* We don't need to update shared cost-based vacuum delay params if
* they haven't changed.
*/
- SpinLockRelease(&pv_shared_cost_params->mutex);
return;
}
+ SpinLockAcquire(&pv_shared_cost_params->mutex);
FillVacCostParams(&pv_shared_cost_params->params_data);
SpinLockRelease(&pv_shared_cost_params->mutex);
--
2.43.0