@@ -1122,7 +1122,7 @@ ExecParallelReportInstrumentation(PlanState *planstate,
11221122 * is allocated and initialized by executor; that is, after ExecutorStart().
11231123 */
11241124static bool
1125- ExecParallelInitializeWorker (PlanState * planstate , shm_toc * toc )
1125+ ExecParallelInitializeWorker (PlanState * planstate , ParallelWorkerContext * pwcxt )
11261126{
11271127 if (planstate == NULL )
11281128 return false;
@@ -1131,40 +1131,44 @@ ExecParallelInitializeWorker(PlanState *planstate, shm_toc *toc)
11311131 {
11321132 case T_SeqScanState :
11331133 if (planstate -> plan -> parallel_aware )
1134- ExecSeqScanInitializeWorker ((SeqScanState * ) planstate , toc );
1134+ ExecSeqScanInitializeWorker ((SeqScanState * ) planstate , pwcxt );
11351135 break ;
11361136 case T_IndexScanState :
11371137 if (planstate -> plan -> parallel_aware )
1138- ExecIndexScanInitializeWorker ((IndexScanState * ) planstate , toc );
1138+ ExecIndexScanInitializeWorker ((IndexScanState * ) planstate ,
1139+ pwcxt );
11391140 break ;
11401141 case T_IndexOnlyScanState :
11411142 if (planstate -> plan -> parallel_aware )
1142- ExecIndexOnlyScanInitializeWorker ((IndexOnlyScanState * ) planstate , toc );
1143+ ExecIndexOnlyScanInitializeWorker ((IndexOnlyScanState * ) planstate ,
1144+ pwcxt );
11431145 break ;
11441146 case T_ForeignScanState :
11451147 if (planstate -> plan -> parallel_aware )
11461148 ExecForeignScanInitializeWorker ((ForeignScanState * ) planstate ,
1147- toc );
1149+ pwcxt );
11481150 break ;
11491151 case T_CustomScanState :
11501152 if (planstate -> plan -> parallel_aware )
11511153 ExecCustomScanInitializeWorker ((CustomScanState * ) planstate ,
1152- toc );
1154+ pwcxt );
11531155 break ;
11541156 case T_BitmapHeapScanState :
11551157 if (planstate -> plan -> parallel_aware )
1156- ExecBitmapHeapInitializeWorker ((BitmapHeapScanState * ) planstate , toc );
1158+ ExecBitmapHeapInitializeWorker ((BitmapHeapScanState * ) planstate ,
1159+ pwcxt );
11571160 break ;
11581161 case T_SortState :
11591162 /* even when not parallel-aware */
1160- ExecSortInitializeWorker ((SortState * ) planstate , toc );
1163+ ExecSortInitializeWorker ((SortState * ) planstate , pwcxt );
11611164 break ;
11621165
11631166 default :
11641167 break ;
11651168 }
11661169
1167- return planstate_tree_walker (planstate , ExecParallelInitializeWorker , toc );
1170+ return planstate_tree_walker (planstate , ExecParallelInitializeWorker ,
1171+ pwcxt );
11681172}
11691173
11701174/*
@@ -1194,6 +1198,7 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc)
11941198 int instrument_options = 0 ;
11951199 void * area_space ;
11961200 dsa_area * area ;
1201+ ParallelWorkerContext pwcxt ;
11971202
11981203 /* Get fixed-size state. */
11991204 fpes = shm_toc_lookup (toc , PARALLEL_KEY_EXECUTOR_FIXED , false);
@@ -1231,7 +1236,9 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc)
12311236 RestoreParamExecParams (paramexec_space , queryDesc -> estate );
12321237
12331238 }
1234- ExecParallelInitializeWorker (queryDesc -> planstate , toc );
1239+ pwcxt .toc = toc ;
1240+ pwcxt .seg = seg ;
1241+ ExecParallelInitializeWorker (queryDesc -> planstate , & pwcxt );
12351242
12361243 /* Pass down any tuple bound */
12371244 ExecSetTupleBound (fpes -> tuples_needed , queryDesc -> planstate );
0 commit comments