From e8d9d68ca4866c775b5d1170581ac9e1ade3abd8 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 2 Jun 2004 21:29:29 +0000 Subject: Per previous discussions, here are two functions to send INT and TERM (cancel and terminate) signals to other backends. They permit only INT and TERM, and permits sending only to postgresql backends. Magnus Hagander --- src/backend/storage/ipc/sinval.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/backend/storage/ipc/sinval.c') diff --git a/src/backend/storage/ipc/sinval.c b/src/backend/storage/ipc/sinval.c index 570feab25e6..856d0f0a73f 100644 --- a/src/backend/storage/ipc/sinval.c +++ b/src/backend/storage/ipc/sinval.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/ipc/sinval.c,v 1.63 2004/05/23 03:50:45 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/ipc/sinval.c,v 1.64 2004/06/02 21:29:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -463,6 +463,40 @@ TransactionIdIsInProgress(TransactionId xid) return result; } +/* + * IsBackendPid -- is a given pid a running backend + */ +bool +IsBackendPid(int pid) +{ + bool result = false; + SISeg *segP = shmInvalBuffer; + ProcState *stateP = segP->procState; + int index; + + LWLockAcquire(SInvalLock, LW_SHARED); + + for (index = 0; index < segP->lastBackend; index++) + { + SHMEM_OFFSET pOffset = stateP[index].procStruct; + + if (pOffset != INVALID_OFFSET) + { + PGPROC *proc = (PGPROC *) MAKE_PTR(pOffset); + + if (proc->pid == pid) + { + result = true; + break; + } + } + } + + LWLockRelease(SInvalLock); + + return result; +} + /* * GetOldestXmin -- returns oldest transaction that was running * when any current transaction was started. -- cgit v1.2.3