mirror of
https://github.com/postgres/postgres.git
synced 2026-04-15 22:10:45 -04:00
Tighten asserts on ParallelWorkerNumber
The comment about ParallelWorkerNumbr in parallel.c says: In parallel workers, it will be set to a value >= 0 and < the number of workers before any user code is invoked; each parallel worker will get a different parallel worker number. However asserts in various places collecting instrumentation allowed (ParallelWorkerNumber == num_workers). That would be a bug, as the value is used as index into an array with num_workers entries. Fixed by adjusting the asserts accordingly. Backpatch to all supported versions. Discussion: https://postgr.es/m/5db067a1-2cdf-4afb-a577-a04f30b69167@vondra.me Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Backpatch-through: 14
This commit is contained in:
parent
5b3f63a1bf
commit
0e5ff9b9b4
8 changed files with 8 additions and 8 deletions
|
|
@ -4413,7 +4413,7 @@ ExecEndAgg(AggState *node)
|
|||
{
|
||||
AggregateInstrumentation *si;
|
||||
|
||||
Assert(ParallelWorkerNumber <= node->shared_info->num_workers);
|
||||
Assert(ParallelWorkerNumber < node->shared_info->num_workers);
|
||||
si = &node->shared_info->sinstrument[ParallelWorkerNumber];
|
||||
si->hash_batches_used = node->hash_batches_used;
|
||||
si->hash_disk_used = node->hash_disk_used;
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ ExecEndBitmapHeapScan(BitmapHeapScanState *node)
|
|||
{
|
||||
BitmapHeapScanInstrumentation *si;
|
||||
|
||||
Assert(ParallelWorkerNumber <= node->sinstrument->num_workers);
|
||||
Assert(ParallelWorkerNumber < node->sinstrument->num_workers);
|
||||
si = &node->sinstrument->sinstrument[ParallelWorkerNumber];
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ ExecEndBitmapIndexScan(BitmapIndexScanState *node)
|
|||
{
|
||||
IndexScanInstrumentation *winstrument;
|
||||
|
||||
Assert(ParallelWorkerNumber <= node->biss_SharedInfo->num_workers);
|
||||
Assert(ParallelWorkerNumber < node->biss_SharedInfo->num_workers);
|
||||
winstrument = &node->biss_SharedInfo->winstrument[ParallelWorkerNumber];
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
if ((node)->shared_info && (node)->am_worker) \
|
||||
{ \
|
||||
Assert(IsParallelWorker()); \
|
||||
Assert(ParallelWorkerNumber <= (node)->shared_info->num_workers); \
|
||||
Assert(ParallelWorkerNumber < (node)->shared_info->num_workers); \
|
||||
instrumentSortedGroup(&(node)->shared_info->sinfo[ParallelWorkerNumber].groupName##GroupInfo, \
|
||||
(node)->groupName##_state); \
|
||||
} \
|
||||
|
|
|
|||
|
|
@ -423,7 +423,7 @@ ExecEndIndexOnlyScan(IndexOnlyScanState *node)
|
|||
{
|
||||
IndexScanInstrumentation *winstrument;
|
||||
|
||||
Assert(ParallelWorkerNumber <= node->ioss_SharedInfo->num_workers);
|
||||
Assert(ParallelWorkerNumber < node->ioss_SharedInfo->num_workers);
|
||||
winstrument = &node->ioss_SharedInfo->winstrument[ParallelWorkerNumber];
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -804,7 +804,7 @@ ExecEndIndexScan(IndexScanState *node)
|
|||
{
|
||||
IndexScanInstrumentation *winstrument;
|
||||
|
||||
Assert(ParallelWorkerNumber <= node->iss_SharedInfo->num_workers);
|
||||
Assert(ParallelWorkerNumber < node->iss_SharedInfo->num_workers);
|
||||
winstrument = &node->iss_SharedInfo->winstrument[ParallelWorkerNumber];
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1122,7 +1122,7 @@ ExecEndMemoize(MemoizeState *node)
|
|||
if (node->stats.mem_peak == 0)
|
||||
node->stats.mem_peak = node->mem_used;
|
||||
|
||||
Assert(ParallelWorkerNumber <= node->shared_info->num_workers);
|
||||
Assert(ParallelWorkerNumber < node->shared_info->num_workers);
|
||||
si = &node->shared_info->sinstrument[ParallelWorkerNumber];
|
||||
memcpy(si, &node->stats, sizeof(MemoizeInstrumentation));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ ExecSort(PlanState *pstate)
|
|||
TuplesortInstrumentation *si;
|
||||
|
||||
Assert(IsParallelWorker());
|
||||
Assert(ParallelWorkerNumber <= node->shared_info->num_workers);
|
||||
Assert(ParallelWorkerNumber < node->shared_info->num_workers);
|
||||
si = &node->shared_info->sinstrument[ParallelWorkerNumber];
|
||||
tuplesort_get_stats(tuplesortstate, si);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue