On Tue, Mar 17, 2015 at 1:42 AM, Amit Kapila <amit.kapil...@gmail.com> wrote: > The problem occurs in second loop inside DestroyParallelContext() > where it calls WaitForBackgroundWorkerShutdown(). Basically > WaitForBackgroundWorkerShutdown() just checks for BGWH_STOPPED > status, refer below code in parallel-mode patch: > > + status = GetBackgroundWorkerPid(handle, &pid); > + if (status == BGWH_STOPPED) > + return status; > > So if the status here returned is BGWH_NOT_YET_STARTED, then it > will go for WaitLatch and will there forever. > > I think fix is to check if status is BGWH_STOPPED or BGWH_NOT_YET_STARTED, > then just return the status. > > What do you say?
No, that's not right. If we return when the status is BGWH_NOT_YET_STARTED, then the postmaster could subsequently start the worker. Can you try this: diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index f80141a..39b919f 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -244,6 +244,8 @@ BackgroundWorkerStateChange(void) rw->rw_terminate = true; if (rw->rw_pid != 0) kill(rw->rw_pid, SIGTERM); + else + ReportBackgroundWorkerPID(rw); } continue; } -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers