• Robert Haas's avatar
    Fix status reporting for terminated bgworkers that were never started. · bf740ce9
    Robert Haas authored
    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.
    bf740ce9
bgworker.c 28 KB