*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.537 2007/08/02 23:39:44 adunstan Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.538 2007/08/03 20:06:50 tgl Exp $
*
* NOTES
*
* children we have and send them appropriate signals when necessary.
*
* "Special" children such as the startup, bgwriter and autovacuum launcher
- * tasks are not in this list. Autovacuum worker processes are on it.
+ * tasks are not in this list. Autovacuum worker processes are in it.
*/
typedef struct bkend
{
*/
bn->pid = pid;
bn->cancel_key = MyCancelKey;
+ bn->is_autovacuum = false;
DLAddHead(BackendList, DLNewElem(bn));
#ifdef EXEC_BACKEND
ShmemBackendArrayAdd(bn);
if (StartupPID != 0 || FatalError || Shutdown != NoShutdown)
return;
+ /*
+ * Compute the cancel key that will be assigned to this session.
+ * We probably don't need cancel keys for autovac workers, but we'd
+ * better have something random in the field to prevent unfriendly
+ * people from sending cancels to them.
+ */
+ MyCancelKey = PostmasterRandom();
+
bn = (Backend *) malloc(sizeof(Backend));
if (bn)
{
bn->pid = StartAutoVacWorker();
- bn->is_autovacuum = true;
- /* we don't need a cancel key */
-
if (bn->pid > 0)
{
+ bn->cancel_key = MyCancelKey;
+ bn->is_autovacuum = true;
DLAddHead(BackendList, DLNewElem(bn));
#ifdef EXEC_BACKEND
ShmemBackendArrayAdd(bn);
free(bn);
}
else
- elog(LOG, "out of memory");
+ ereport(LOG,
+ (errcode(ERRCODE_OUT_OF_MEMORY),
+ errmsg("out of memory")));
/* report the failure to the launcher */
AutoVacWorkerFailed();