v1-0001-Improve-PID-XXXX-is-not-a-PostgreSQL-server-proce.patch
application/octet-stream
Filename: v1-0001-Improve-PID-XXXX-is-not-a-PostgreSQL-server-proce.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v1-0001
Subject: Improve PID XXXX is not a PostgreSQL server process message
| File | + | − |
|---|---|---|
| src/backend/storage/ipc/signalfuncs.c | 34 | 5 |
From 634ad8e13bfc8723f08f674747bcd6443728ddab Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddy@enterprisedb.com>
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