#ifndef _POSTMASTER_H
#define _POSTMASTER_H
#include "lib/ilist.h"
#include "miscadmin.h"
typedef struct
{
pid_t pid;
int child_slot;
BackendType bkend_type;
struct RegisteredBgWorker *rw;
bool bgworker_notify;
dlist_node elem;
} PMChild;
#ifdef EXEC_BACKEND
extern PGDLLIMPORT int num_pmchild_slots;
#endif
extern PGDLLIMPORT bool EnableSSL;
extern PGDLLIMPORT int SuperuserReservedConnections;
extern PGDLLIMPORT int ReservedConnections;
extern PGDLLIMPORT int PostPortNumber;
extern PGDLLIMPORT int Unix_socket_permissions;
extern PGDLLIMPORT char *Unix_socket_group;
extern PGDLLIMPORT char *Unix_socket_directories;
extern PGDLLIMPORT char *ListenAddresses;
extern PGDLLIMPORT bool ClientAuthInProgress;
extern PGDLLIMPORT int PreAuthDelay;
extern PGDLLIMPORT int AuthenticationTimeout;
extern PGDLLIMPORT bool log_hostname;
extern PGDLLIMPORT bool enable_bonjour;
extern PGDLLIMPORT char *bonjour_name;
extern PGDLLIMPORT bool restart_after_crash;
extern PGDLLIMPORT bool remove_temp_files_after_crash;
extern PGDLLIMPORT bool send_abort_for_crash;
extern PGDLLIMPORT bool send_abort_for_kill;
#ifdef WIN32
extern PGDLLIMPORT HANDLE PostmasterHandle;
#else
extern PGDLLIMPORT int postmaster_alive_fds[2];
#define POSTMASTER_FD_WATCH 0
#define POSTMASTER_FD_OWN 1
#endif
extern PGDLLIMPORT const char *progname;
extern PGDLLIMPORT bool redirection_done;
extern PGDLLIMPORT bool LoadedSSL;
pg_noreturn extern void PostmasterMain(int argc, char *argv[]);
extern void ClosePostmasterPorts(bool am_syslogger);
extern void InitProcessGlobals(void);
extern int MaxLivePostmasterChildren(void);
extern bool PostmasterMarkPIDForWorkerNotify(int);
#ifdef WIN32
extern void pgwin32_register_deadchild_callback(HANDLE procHandle, DWORD procId);
#endif
extern PGDLLIMPORT struct ClientSocket *MyClientSocket;
extern pid_t postmaster_child_launch(BackendType child_type,
int child_slot,
void *startup_data,
size_t startup_data_len,
struct ClientSocket *client_sock);
const char *PostmasterChildName(BackendType child_type);
#ifdef EXEC_BACKEND
pg_noreturn extern void SubPostmasterMain(int argc, char *argv[]);
#endif
extern PGDLLIMPORT dlist_head ActiveChildList;
extern void InitPostmasterChildSlots(void);
extern PMChild *AssignPostmasterChildSlot(BackendType btype);
extern PMChild *AllocDeadEndChild(void);
extern bool ReleasePostmasterChildSlot(PMChild *pmchild);
extern PMChild *FindPostmasterChildByPid(int pid);
typedef enum DispatchOption
{
DISPATCH_CHECK,
DISPATCH_BOOT,
DISPATCH_FORKCHILD,
DISPATCH_DESCRIBE_CONFIG,
DISPATCH_SINGLE,
DISPATCH_POSTMASTER,
} DispatchOption;
extern DispatchOption parse_dispatch_option(const char *name);
#endif