From 634ad8e13bfc8723f08f674747bcd6443728ddab Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy Date: Fri, 5 Mar 2021 09:15:36 +0530 Subject: [PATCH v1] Improve PID XXXX is not a PostgreSQL server process message --- src/backend/storage/ipc/signalfuncs.c | 39 +++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c index 69fe23a256..468c9a03cf 100644 --- a/src/backend/storage/ipc/signalfuncs.c +++ b/src/backend/storage/ipc/signalfuncs.c @@ -47,7 +47,17 @@ static int pg_signal_backend(int pid, int sig) { - PGPROC *proc = BackendPidGetProc(pid); + PGPROC *proc; + + if (PostmasterPid == pid) + { + ereport(WARNING, + (errmsg("signalling postmaster with PID %d is not allowed", pid))); + + return SIGNAL_BACKEND_ERROR; + } + + proc = BackendPidGetProc(pid); /* * BackendPidGetProc returns NULL if the pid isn't valid; but by the time @@ -60,11 +70,30 @@ pg_signal_backend(int pid, int sig) if (proc == NULL) { /* - * This is just a warning so a loop-through-resultset will not abort - * if one backend terminated on its own during the run. + * For an auxiliary process, retrieve process info from AuxiliaryProcs + * stored in shared-memory. */ - ereport(WARNING, - (errmsg("PID %d is not a PostgreSQL server process", pid))); + proc = AuxiliaryPidGetProc(pid); + + if (proc) + { + /* + * AuxiliaryProcs are still PostgreSQL server processes, hence + * report a proper warning that says we cannot signal them. + */ + ereport(WARNING, + (errmsg("signalling PostgreSQL server process with PID %d is not allowed", pid))); + } + else + { + /* + * This is just a warning so a loop-through-resultset will not + * abort if one backend terminated on its own during the run. + */ + ereport(WARNING, + (errmsg("PID %d is not a PostgreSQL server process", pid))); + } + return SIGNAL_BACKEND_ERROR; } -- 2.25.1