mirror of
https://github.com/postgres/postgres.git
synced 2025-08-31 17:02:12 +03:00
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
This commit is contained in:
@@ -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.
|
||||
|
Reference in New Issue
Block a user