mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Don't use bgw_main even to specify in-core bgworker entrypoints.
On EXEC_BACKEND builds, this can fail if ASLR is in use. Backpatch to 9.5. On master, completely remove the bgw_main field completely, since there is no situation in which it is safe for an EXEC_BACKEND build. On 9.6 and 9.5, leave the field intact to avoid breaking things for third-party code that doesn't care about working under EXEC_BACKEND. Prior to 9.5, there are no in-core bgworker entrypoints. Petr Jelinek, reviewed by me. Discussion: http://postgr.es/m/09d8ad33-4287-a09b-a77f-77f8761adb5e@2ndquadrant.com
This commit is contained in:
@ -110,7 +110,6 @@ static dlist_head pcxt_list = DLIST_STATIC_INIT(pcxt_list);
|
||||
/* Private functions. */
|
||||
static void HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg);
|
||||
static void ParallelExtensionTrampoline(dsm_segment *seg, shm_toc *toc);
|
||||
static void ParallelWorkerMain(Datum main_arg);
|
||||
static void WaitForParallelWorkersToExit(ParallelContext *pcxt);
|
||||
|
||||
|
||||
@ -458,7 +457,8 @@ LaunchParallelWorkers(ParallelContext *pcxt)
|
||||
| BGWORKER_CLASS_PARALLEL;
|
||||
worker.bgw_start_time = BgWorkerStart_ConsistentState;
|
||||
worker.bgw_restart_time = BGW_NEVER_RESTART;
|
||||
worker.bgw_main = ParallelWorkerMain;
|
||||
sprintf(worker.bgw_library_name, "postgres");
|
||||
sprintf(worker.bgw_function_name, "ParallelWorkerMain");
|
||||
worker.bgw_main_arg = UInt32GetDatum(dsm_segment_handle(pcxt->seg));
|
||||
worker.bgw_notify_pid = MyProcPid;
|
||||
memset(&worker.bgw_extra, 0, BGW_EXTRALEN);
|
||||
@ -931,7 +931,7 @@ AtEOXact_Parallel(bool isCommit)
|
||||
/*
|
||||
* Main entrypoint for parallel workers.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
ParallelWorkerMain(Datum main_arg)
|
||||
{
|
||||
dsm_segment *seg;
|
||||
|
Reference in New Issue
Block a user