]> granicus.if.org Git - postgresql/commit
Fix status reporting for terminated bgworkers that were never started.
authorRobert Haas <rhaas@postgresql.org>
Thu, 19 Mar 2015 14:56:34 +0000 (10:56 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 19 Mar 2015 15:08:54 +0000 (11:08 -0400)
commit76d07a2a0633836a82c43beb8ed3b08a64dc3d46
tree1addda1116a05fa6da347f4327409857f6ee1f84
parent904e8b627c2547e93112080aac9381bbf39e8e99
Fix status reporting for terminated bgworkers that were never started.

Previously, GetBackgroundWorkerPid() would return BGWH_NOT_YET_STARTED
if the slot used for the worker registration had not been reused by
unrelated activity, and BGWH_STOPPED if it had.  Either way, a process
that had requested notification when the state of one of its
background workers changed did not receive such notifications.  Fix
things so that GetBackgroundWorkerPid() always returns BGWH_STOPPED in
this situation, so that we do not erroneously give waiters the
impression that the worker will eventually be started; and send
notifications just as we would if the process terminated after having
been started, so that it's possible to wait for the postmaster to
process a worker termination request without polling.

Discovered by Amit Kapila during testing of parallel sequential scan.
Analysis and fix by me.  Back-patch to 9.4; there may not be anyone
relying on this interface yet, but if anyone is, the new behavior is a
clear improvement.
src/backend/postmaster/bgworker.c