text: /*-------------------------------------------------------------------------
   *
   * pmsignal.h
   *      routines for signaling the postmaster from its child processes
   *
   *
   * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * src/include/storage/pmsignal.h
   *
   *-------------------------------------------------------------------------
   */
  #ifndef PMSIGNAL_H
  #define PMSIGNAL_H
  
  /*
   * Reasons for signaling the postmaster.  We can cope with simultaneous
   * signals for different reasons.  If the same reason is signaled multiple
   * times in quick succession, however, the postmaster is likely to observe
   * only one notification of it.  This is okay for the present uses.
   */
  typedef enum
  {
      PMSIGNAL_RECOVERY_STARTED,    /* recovery has started */
      PMSIGNAL_BEGIN_HOT_STANDBY, /* begin Hot Standby */
      PMSIGNAL_WAKEN_ARCHIVER,    /* send a NOTIFY signal to xlog archiver */
      PMSIGNAL_ROTATE_LOGFILE,    /* send SIGUSR1 to syslogger to rotate logfile */
      PMSIGNAL_START_AUTOVAC_LAUNCHER,    /* start an autovacuum launcher */
      PMSIGNAL_START_AUTOVAC_WORKER,    /* start an autovacuum worker */
      PMSIGNAL_BACKGROUND_WORKER_CHANGE,    /* background worker state change */
      PMSIGNAL_START_WALRECEIVER, /* start a walreceiver */
      PMSIGNAL_ADVANCE_STATE_MACHINE, /* advance postmaster's state machine */
  #ifdef __AUDIT__
      PMSIGNAL_ROTATE_AUDIT_LOGFILE,    /* send SIGUSR1 to audit logger to rotate logfile */
      PMSIGNAL_WAKEN_AUDIT_LOGGER,    /* send SIGUSR2 to audit logger to read audit log */
  #endif
  #ifdef __AUDIT_FGA__
      PMSIGNAL_WAKEN_AUDIT_FGA_TRIGGER, /*send  SIGUSR1 to audit fga bgworker to trigger function */
  #endif
      NUM_PMSIGNALS                /* Must be last value of enum! */
  } PMSignalReason;
  
  /* PMSignalData is an opaque struct, details known only within pmsignal.c */
  typedef struct PMSignalData PMSignalData;
  
  /*
   * prototypes for functions in pmsignal.c
   */
  extern Size PMSignalShmemSize(void);
  extern void PMSignalShmemInit(void);
  extern void SendPostmasterSignal(PMSignalReason reason);
  extern bool CheckPostmasterSignal(PMSignalReason reason);
  extern int    AssignPostmasterChildSlot(void);
  extern bool ReleasePostmasterChildSlot(int slot);
  extern bool IsPostmasterChildWalSender(int slot);
  extern void MarkPostmasterChildActive(void);
  extern void MarkPostmasterChildInactive(void);
  extern void MarkPostmasterChildWalSender(void);
  extern bool PostmasterIsAlive(void);
  
  #endif                            /* PMSIGNAL_H */
  