diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index e9751aa..fc3b79a 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -474,6 +474,7 @@ MarkAsPreparingGuts(GlobalTransaction gxact, TransactionId xid, const char *gid, proc->databaseId = databaseid; proc->roleId = owner; proc->isBackgroundWorker = false; + proc->isAutoVacuumLauncher = false; proc->lwWaiting = false; proc->lwWaitMode = 0; proc->waitLock = NULL; diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 3e716b1..cece0cb 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -371,6 +371,7 @@ InitProcess(void) MyProc->databaseId = InvalidOid; MyProc->roleId = InvalidOid; MyProc->isBackgroundWorker = IsBackgroundWorker; + MyProc->isAutoVacuumLauncher = IsAutoVacuumLauncherProcess(); MyPgXact->delayChkpt = false; MyPgXact->vacuumFlags = 0; /* NB -- autovac launcher intentionally does not set IS_AUTOVACUUM */ @@ -544,6 +545,7 @@ InitAuxiliaryProcess(void) MyProc->databaseId = InvalidOid; MyProc->roleId = InvalidOid; MyProc->isBackgroundWorker = IsBackgroundWorker; + MyProc->isAutoVacuumLauncher = IsAutoVacuumLauncherProcess(); MyPgXact->delayChkpt = false; MyPgXact->vacuumFlags = 0; MyProc->lwWaiting = false; diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index 9cc0b08..f9604d4 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -228,7 +228,7 @@ pg_signal_backend(int pid, int sig) * this mechanism involve some request for ending the process anyway, that * it might end on its own first is not a problem. */ - if (proc == NULL) + if (proc == NULL || proc->isBackgroundWorker || proc->isAutoVacuumLauncher) { /* * This is just a warning so a loop-through-resultset will not abort diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h index 2fbde36..fa019f5 100644 --- a/src/include/storage/proc.h +++ b/src/include/storage/proc.h @@ -114,6 +114,7 @@ struct PGPROC Oid roleId; /* OID of role using this backend */ bool isBackgroundWorker; /* true if background worker. */ + bool isAutoVacuumLauncher; /* true if autovacuum launcher. */ /* * While in hot standby mode, shows that a conflict signal has been sent