@@ -1122,7 +1122,7 @@ ExecParallelReportInstrumentation(PlanState *planstate,
1122
1122
* is allocated and initialized by executor; that is, after ExecutorStart().
1123
1123
*/
1124
1124
static bool
1125
- ExecParallelInitializeWorker (PlanState * planstate , shm_toc * toc )
1125
+ ExecParallelInitializeWorker (PlanState * planstate , ParallelWorkerContext * pwcxt )
1126
1126
{
1127
1127
if (planstate == NULL )
1128
1128
return false;
@@ -1131,40 +1131,44 @@ ExecParallelInitializeWorker(PlanState *planstate, shm_toc *toc)
1131
1131
{
1132
1132
case T_SeqScanState :
1133
1133
if (planstate -> plan -> parallel_aware )
1134
- ExecSeqScanInitializeWorker ((SeqScanState * ) planstate , toc );
1134
+ ExecSeqScanInitializeWorker ((SeqScanState * ) planstate , pwcxt );
1135
1135
break ;
1136
1136
case T_IndexScanState :
1137
1137
if (planstate -> plan -> parallel_aware )
1138
- ExecIndexScanInitializeWorker ((IndexScanState * ) planstate , toc );
1138
+ ExecIndexScanInitializeWorker ((IndexScanState * ) planstate ,
1139
+ pwcxt );
1139
1140
break ;
1140
1141
case T_IndexOnlyScanState :
1141
1142
if (planstate -> plan -> parallel_aware )
1142
- ExecIndexOnlyScanInitializeWorker ((IndexOnlyScanState * ) planstate , toc );
1143
+ ExecIndexOnlyScanInitializeWorker ((IndexOnlyScanState * ) planstate ,
1144
+ pwcxt );
1143
1145
break ;
1144
1146
case T_ForeignScanState :
1145
1147
if (planstate -> plan -> parallel_aware )
1146
1148
ExecForeignScanInitializeWorker ((ForeignScanState * ) planstate ,
1147
- toc );
1149
+ pwcxt );
1148
1150
break ;
1149
1151
case T_CustomScanState :
1150
1152
if (planstate -> plan -> parallel_aware )
1151
1153
ExecCustomScanInitializeWorker ((CustomScanState * ) planstate ,
1152
- toc );
1154
+ pwcxt );
1153
1155
break ;
1154
1156
case T_BitmapHeapScanState :
1155
1157
if (planstate -> plan -> parallel_aware )
1156
- ExecBitmapHeapInitializeWorker ((BitmapHeapScanState * ) planstate , toc );
1158
+ ExecBitmapHeapInitializeWorker ((BitmapHeapScanState * ) planstate ,
1159
+ pwcxt );
1157
1160
break ;
1158
1161
case T_SortState :
1159
1162
/* even when not parallel-aware */
1160
- ExecSortInitializeWorker ((SortState * ) planstate , toc );
1163
+ ExecSortInitializeWorker ((SortState * ) planstate , pwcxt );
1161
1164
break ;
1162
1165
1163
1166
default :
1164
1167
break ;
1165
1168
}
1166
1169
1167
- return planstate_tree_walker (planstate , ExecParallelInitializeWorker , toc );
1170
+ return planstate_tree_walker (planstate , ExecParallelInitializeWorker ,
1171
+ pwcxt );
1168
1172
}
1169
1173
1170
1174
/*
@@ -1194,6 +1198,7 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc)
1194
1198
int instrument_options = 0 ;
1195
1199
void * area_space ;
1196
1200
dsa_area * area ;
1201
+ ParallelWorkerContext pwcxt ;
1197
1202
1198
1203
/* Get fixed-size state. */
1199
1204
fpes = shm_toc_lookup (toc , PARALLEL_KEY_EXECUTOR_FIXED , false);
@@ -1231,7 +1236,9 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc)
1231
1236
RestoreParamExecParams (paramexec_space , queryDesc -> estate );
1232
1237
1233
1238
}
1234
- ExecParallelInitializeWorker (queryDesc -> planstate , toc );
1239
+ pwcxt .toc = toc ;
1240
+ pwcxt .seg = seg ;
1241
+ ExecParallelInitializeWorker (queryDesc -> planstate , & pwcxt );
1235
1242
1236
1243
/* Pass down any tuple bound */
1237
1244
ExecSetTupleBound (fpes -> tuples_needed , queryDesc -> planstate );
0 commit comments