After a crash, don't restart workers with BGW_NEVER_RESTART.

Amit Khandekar
This commit is contained in:
Robert Haas 2015-04-02 14:38:06 -04:00
parent abd94bcac4
commit b3a5e76e12

View File

@ -419,9 +419,9 @@ BackgroundWorkerStopNotifications(pid_t pid)
/*
* Reset background worker crash state.
*
* We assume that, after a crash-and-restart cycle, background workers should
* be restarted immediately, instead of waiting for bgw_restart_time to
* elapse.
* We assume that, after a crash-and-restart cycle, background workers without
* the never-restart flag should be restarted immediately, instead of waiting
* for bgw_restart_time to elapse.
*/
void
ResetBackgroundWorkerCrashTimes(void)
@ -433,7 +433,14 @@ ResetBackgroundWorkerCrashTimes(void)
RegisteredBgWorker *rw;
rw = slist_container(RegisteredBgWorker, rw_lnode, iter.cur);
rw->rw_crashed_at = 0;
/*
* For workers that should not be restarted, we don't want to lose
* the information that they have crashed; otherwise, they would be
* restarted, which is wrong.
*/
if (rw->rw_worker.bgw_restart_time != BGW_NEVER_RESTART)
rw->rw_crashed_at = 0;
}
}