/* ------------------------------------------------------------------------- * * procsignal.h * Routines for interprocess signalling * * * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/procsignal.h * * ------------------------------------------------------------------------- */ #ifndef PROCSIGNAL_H #define PROCSIGNAL_H #include "storage/backendid.h" /* * Reasons for signalling a Postgres child process (a backend or an auxiliary * process, like checkpointer). We can cope with concurrent signals for different * reasons. However, if the same reason is signaled multiple times in quick * succession, the process is likely to observe only one notification of it. * This is okay for the present uses. * * Also, because of race conditions, it's important that all the signals be * defined so that no harm is done if a process mistakenly receives one. */ #ifdef PGXC /* * In the case of Postgres-XC, it may be possible that this backend is * signaled during a pool manager reload process. In this case it means that * remote node connection has been changed inside pooler, so backend has to * abort its current transaction, reconnect to pooler and update its session * information regarding remote node handles. */ #endif typedef enum { PROCSIG_CATCHUP_INTERRUPT, /* sinval catchup interrupt */ PROCSIG_NOTIFY_INTERRUPT, /* listen/notify interrupt */ PROCSIG_DEFAULTXACT_READONLY, /* default transaction read only */ #ifdef PGXC PROCSIG_PGXCPOOL_RELOAD, /* abort current transaction and reconnect to pooler */ PROCSIG_MEMORYCONTEXT_DUMP, /* dump memory context on all backends */ PROCSIG_UPDATE_WORKLOAD_DATA, /* update workload data */ PROCSIG_SPACE_LIMIT, /* space limitation */ PROCSIG_STREAM_STOP_CHECK, /* check local connections close or not */ #endif /* Recovery conflict reasons */ PROCSIG_RECOVERY_CONFLICT_DATABASE, PROCSIG_RECOVERY_CONFLICT_TABLESPACE, PROCSIG_RECOVERY_CONFLICT_LOCK, PROCSIG_RECOVERY_CONFLICT_SNAPSHOT, PROCSIG_RECOVERY_CONFLICT_BUFFERPIN, PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, PROCSIG_EXECUTOR_FLAG, /* close active session socket */ PROCSIG_COMM_CLOSE_ACTIVE_SESSION_SOCKET, NUM_PROCSIGNALS /* Must be last! */ } ProcSignalReason; /* * prototypes for functions in procsignal.c */ extern Size ProcSignalShmemSize(void); extern void ProcSignalShmemInit(void); extern void ProcSignalInit(int pss_idx); extern int SendProcSignal(ThreadId pid, ProcSignalReason reason, BackendId backendId); extern void procsignal_sigusr1_handler(SIGNAL_ARGS); extern int SendProcSignalForLibcomm(ThreadId pid, ProcSignalReason reason, BackendId backendId); #endif /* PROCSIGNAL_H */