mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
Avoid passing function pointers across process boundaries.
We'd already recognized that we can't pass function pointers across process boundaries for functions in loadable modules, since a shared library could get loaded at different addresses in different processes. But actually the practice doesn't work for functions in the core backend either, if we're using EXEC_BACKEND. This is the cause of recent failures on buildfarm member culicidae. Switch to passing a string function name in all cases. Something like this needs to be back-patched into 9.6, but let's see if the buildfarm likes it first. Petr Jelinek, with a bunch of basically-cosmetic adjustments by me Discussion: https://postgr.es/m/548f9c1d-eafa-e3fa-9da8-f0cc2f654e60@2ndquadrant.com
This commit is contained in:
@ -112,8 +112,7 @@ static shm_mq_handle **ExecParallelSetupTupleQueues(ParallelContext *pcxt,
|
||||
static bool ExecParallelRetrieveInstrumentation(PlanState *planstate,
|
||||
SharedExecutorInstrumentation *instrumentation);
|
||||
|
||||
/* Helper functions that run in the parallel worker. */
|
||||
static void ParallelQueryMain(dsm_segment *seg, shm_toc *toc);
|
||||
/* Helper function that runs in the parallel worker. */
|
||||
static DestReceiver *ExecParallelGetReceiver(dsm_segment *seg, shm_toc *toc);
|
||||
|
||||
/*
|
||||
@ -410,7 +409,7 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate, int nworkers)
|
||||
pstmt_data = ExecSerializePlan(planstate->plan, estate);
|
||||
|
||||
/* Create a parallel context. */
|
||||
pcxt = CreateParallelContext(ParallelQueryMain, nworkers);
|
||||
pcxt = CreateParallelContext("postgres", "ParallelQueryMain", nworkers);
|
||||
pei->pcxt = pcxt;
|
||||
|
||||
/*
|
||||
@ -831,7 +830,7 @@ ExecParallelInitializeWorker(PlanState *planstate, shm_toc *toc)
|
||||
* to do this are also stored in the dsm_segment and can be accessed through
|
||||
* the shm_toc.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
ParallelQueryMain(dsm_segment *seg, shm_toc *toc)
|
||||
{
|
||||
BufferUsage *buffer_usage;
|
||||
|
Reference in New Issue
Block a user