I wrote: > Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com> writes: >> 4) IIUC, in the patch we mark slot->terminate = true only for >> BGW_NEVER_RESTART kind bg workers, what happens if a bg worker has >> bgw_restart_time seconds and don't we hit the hanging issue(that we >> are trying to solve here) for those bg workers?
> The hang problem is not with the worker itself, it's with anything > that might be waiting around for the worker to finish. It doesn't > seem to me to make a whole lot of sense to wait for a restartable > worker; what would that mean?
Upon further looking around, I noted that autoprewarm's autoprewarm_start_worker() function does that, so we can't really dismiss it.
However, what we can do instead is to change the condition to be "cancel pending bgworker requests if there is a waiting process". Almost all of the time, that means it's a dynamic bgworker with BGW_NEVER_RESTART, so there's no difference. In the exceptional cases like autoprewarm_start_worker, this would result in removing a bgworker registration record for a restartable worker ... but since we're shutting down, that record would have no effect before the postmaster exits, anyway. I think we can live with that, at least till such time as somebody redesigns this in a cleaner way.
I pushed a fix along those lines.
Thanks for the change.
Cleanups like this in the BGW API definitely make life easier.