📄 pmsignal.c
字号:
/*------------------------------------------------------------------------- * * pmsignal.c * routines for signaling the postmaster from its child processes * * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION * $Header: /cvsroot/pgsql/src/backend/storage/ipc/pmsignal.c,v 1.5 2003/08/04 02:40:03 momjian Exp $ * *------------------------------------------------------------------------- */#include "postgres.h"#include <signal.h>#include <unistd.h>#include "miscadmin.h"#include "storage/pmsignal.h"#include "storage/shmem.h"/* * The postmaster is signaled by its children by sending SIGUSR1. The * specific reason is communicated via flags in shared memory. We keep * a boolean flag for each possible "reason", so that different reasons * can be signaled by different backends at the same time. (However, * if the same reason is signaled more than once simultaneously, the * postmaster will observe it only once.) * * The flags are actually declared as "volatile sig_atomic_t" for maximum * portability. This should ensure that loads and stores of the flag * values are atomic, allowing us to dispense with any explicit locking. */static volatile sig_atomic_t *PMSignalFlags;/* * PMSignalInit - initialize during shared-memory creation */voidPMSignalInit(void){ PMSignalFlags = (sig_atomic_t *) ShmemAlloc(NUM_PMSIGNALS * sizeof(sig_atomic_t)); MemSet(PMSignalFlags, 0, NUM_PMSIGNALS * sizeof(sig_atomic_t));}/* * SendPostmasterSignal - signal the postmaster from a child process */voidSendPostmasterSignal(PMSignalReason reason){ /* If called in a standalone backend, do nothing */ if (!IsUnderPostmaster) return; /* Atomically set the proper flag */ PMSignalFlags[reason] = true; /* Send signal to postmaster (assume it is our direct parent) */ kill(getppid(), SIGUSR1);}/* * CheckPostmasterSignal - check to see if a particular reason has been * signaled, and clear the signal flag. Should be called by postmaster * after receiving SIGUSR1. */boolCheckPostmasterSignal(PMSignalReason reason){ /* Careful here --- don't clear flag if we haven't seen it set */ if (PMSignalFlags[reason]) { PMSignalFlags[reason] = false; return true; } return false;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -