diff options
author | Bruce Momjian <bruce@momjian.us> | 2004-06-02 21:29:29 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2004-06-02 21:29:29 +0000 |
commit | e8d9d68ca4866c775b5d1170581ac9e1ade3abd8 (patch) | |
tree | 1ca2cd413be5a75faa23bba21916d2bdbcf90678 /src/backend/storage/ipc/sinval.c | |
parent | de2c66539eaabdcee94ae4f243ec6402058b1f4c (diff) |
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
Diffstat (limited to 'src/backend/storage/ipc/sinval.c')
-rw-r--r-- | src/backend/storage/ipc/sinval.c | 36 |
1 files changed, 35 insertions, 1 deletions
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 $ * *------------------------------------------------------------------------- */ @@ -464,6 +464,40 @@ TransactionIdIsInProgress(TransactionId xid) } /* + * 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. * |