mirror of
https://github.com/zebrajr/postgres.git
synced 2025-12-06 12:20:15 +01:00
Discussion: https://www.postgresql.org/message-id/flat/25095db5-b595-4b85-9100-d358907c25b5%40eisentraut.org
146 lines
5.1 KiB
C
146 lines
5.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* postmaster.h
|
|
* Exports from postmaster/postmaster.c.
|
|
*
|
|
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/postmaster/postmaster.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef _POSTMASTER_H
|
|
#define _POSTMASTER_H
|
|
|
|
#include "lib/ilist.h"
|
|
#include "miscadmin.h"
|
|
|
|
/*
|
|
* A struct representing an active postmaster child process. This is used
|
|
* mainly to keep track of how many children we have and send them appropriate
|
|
* signals when necessary. All postmaster child processes are assigned a
|
|
* PMChild entry. That includes "normal" client sessions, but also autovacuum
|
|
* workers, walsenders, background workers, and aux processes. (Note that at
|
|
* the time of launch, walsenders are labeled B_BACKEND; we relabel them to
|
|
* B_WAL_SENDER upon noticing they've changed their PMChildFlags entry. Hence
|
|
* that check must be done before any operation that needs to distinguish
|
|
* walsenders from normal backends.)
|
|
*
|
|
* "dead-end" children are also allocated a PMChild entry: these are children
|
|
* launched just for the purpose of sending a friendly rejection message to a
|
|
* would-be client. We must track them because they are attached to shared
|
|
* memory, but we know they will never become live backends.
|
|
*
|
|
* child_slot is an identifier that is unique across all running child
|
|
* processes. It is used as an index into the PMChildFlags array. dead-end
|
|
* children are not assigned a child_slot and have child_slot == 0 (valid
|
|
* child_slot ids start from 1).
|
|
*/
|
|
typedef struct
|
|
{
|
|
pid_t pid; /* process id of backend */
|
|
int child_slot; /* PMChildSlot for this backend, if any */
|
|
BackendType bkend_type; /* child process flavor, see above */
|
|
struct RegisteredBgWorker *rw; /* bgworker info, if this is a bgworker */
|
|
bool bgworker_notify; /* gets bgworker start/stop notifications */
|
|
dlist_node elem; /* list link in ActiveChildList */
|
|
} PMChild;
|
|
|
|
#ifdef EXEC_BACKEND
|
|
extern PGDLLIMPORT int num_pmchild_slots;
|
|
#endif
|
|
|
|
/* GUC options */
|
|
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];
|
|
|
|
/*
|
|
* Constants that represent which of postmaster_alive_fds is held by
|
|
* postmaster, and which is used in children to check for postmaster death.
|
|
*/
|
|
#define POSTMASTER_FD_WATCH 0 /* used in children to check for
|
|
* postmaster death */
|
|
#define POSTMASTER_FD_OWN 1 /* kept open by postmaster only */
|
|
#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
|
|
|
|
/* defined in globals.c */
|
|
extern PGDLLIMPORT struct ClientSocket *MyClientSocket;
|
|
|
|
/* prototypes for functions in launch_backend.c */
|
|
extern pid_t postmaster_child_launch(BackendType child_type,
|
|
int child_slot,
|
|
const 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
|
|
|
|
/* defined in pmchild.c */
|
|
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);
|
|
|
|
/*
|
|
* These values correspond to the special must-be-first options for dispatching
|
|
* to various subprograms. parse_dispatch_option() can be used to convert an
|
|
* option name to one of these values.
|
|
*/
|
|
typedef enum DispatchOption
|
|
{
|
|
DISPATCH_CHECK,
|
|
DISPATCH_BOOT,
|
|
DISPATCH_FORKCHILD,
|
|
DISPATCH_DESCRIBE_CONFIG,
|
|
DISPATCH_SINGLE,
|
|
DISPATCH_POSTMASTER, /* must be last */
|
|
} DispatchOption;
|
|
|
|
extern DispatchOption parse_dispatch_option(const char *name);
|
|
|
|
#endif /* _POSTMASTER_H */
|