diff --git a/src/backend/tcop/bgsession.c b/src/backend/tcop/bgsession.c index 486819b..665ef30 100644 --- a/src/backend/tcop/bgsession.c +++ b/src/backend/tcop/bgsession.c @@ -135,8 +135,9 @@ BackgroundSessionStart(void) BgwHandleStatus bgwstatus; StringInfoData msg; char msgtype; + MemoryContext oldcontext; - session = palloc(sizeof(*session)); + session = MemoryContextAlloc(TopMemoryContext, sizeof(*session)); session->resowner = ResourceOwnerCreate(NULL, "background session"); @@ -188,8 +189,10 @@ BackgroundSessionStart(void) shm_toc_insert(toc, BGSESSION_KEY_RESPONSE_QUEUE, response_mq); shm_mq_set_receiver(response_mq, MyProc); + oldcontext = MemoryContextSwitchTo(TopMemoryContext); session->command_qh = shm_mq_attach(command_mq, seg, NULL); session->response_qh = shm_mq_attach(response_mq, seg, NULL); + MemoryContextSwitchTo(oldcontext); worker.bgw_flags = BGWORKER_SHMEM_ACCESS | BGWORKER_BACKEND_DATABASE_CONNECTION; @@ -200,11 +203,13 @@ BackgroundSessionStart(void) worker.bgw_main_arg = UInt32GetDatum(dsm_segment_handle(seg)); worker.bgw_notify_pid = MyProcPid; + oldcontext = MemoryContextSwitchTo(TopMemoryContext); if (!RegisterDynamicBackgroundWorker(&worker, &session->worker_handle)) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_RESOURCES), errmsg("could not register background process"), errhint("You might need to increase max_worker_processes."))); + MemoryContextSwitchTo(oldcontext); shm_mq_set_handle(session->command_qh, session->worker_handle); shm_mq_set_handle(session->response_qh, session->worker_handle);