1 | /*-------------------------------------------------------------------- |
---|---|
2 | * bgworker_internals.h |
3 | * POSTGRES pluggable background workers internals |
4 | * |
5 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
6 | * Portions Copyright (c) 1994, Regents of the University of California |
7 | * |
8 | * IDENTIFICATION |
9 | * src/include/postmaster/bgworker_internals.h |
10 | *-------------------------------------------------------------------- |
11 | */ |
12 | #ifndef BGWORKER_INTERNALS_H |
13 | #define BGWORKER_INTERNALS_H |
14 | |
15 | #include "datatype/timestamp.h" |
16 | #include "lib/ilist.h" |
17 | #include "postmaster/bgworker.h" |
18 | |
19 | /* GUC options */ |
20 | |
21 | /* |
22 | * Maximum possible value of parallel workers. |
23 | */ |
24 | #define MAX_PARALLEL_WORKER_LIMIT 1024 |
25 | |
26 | /* |
27 | * List of background workers, private to postmaster. |
28 | * |
29 | * A worker that requests a database connection during registration will have |
30 | * rw_backend set, and will be present in BackendList. Note: do not rely on |
31 | * rw_backend being non-NULL for shmem-connected workers! |
32 | */ |
33 | typedef struct RegisteredBgWorker |
34 | { |
35 | BackgroundWorker rw_worker; /* its registry entry */ |
36 | struct bkend *rw_backend; /* its BackendList entry, or NULL */ |
37 | pid_t rw_pid; /* 0 if not running */ |
38 | int rw_child_slot; |
39 | TimestampTz rw_crashed_at; /* if not 0, time it last crashed */ |
40 | int rw_shmem_slot; |
41 | bool rw_terminate; |
42 | slist_node rw_lnode; /* list link */ |
43 | } RegisteredBgWorker; |
44 | |
45 | extern slist_head BackgroundWorkerList; |
46 | |
47 | extern Size BackgroundWorkerShmemSize(void); |
48 | extern void BackgroundWorkerShmemInit(void); |
49 | extern void BackgroundWorkerStateChange(void); |
50 | extern void ForgetBackgroundWorker(slist_mutable_iter *cur); |
51 | extern void ReportBackgroundWorkerPID(RegisteredBgWorker *); |
52 | extern void ReportBackgroundWorkerExit(slist_mutable_iter *cur); |
53 | extern void BackgroundWorkerStopNotifications(pid_t pid); |
54 | extern void ResetBackgroundWorkerCrashTimes(void); |
55 | |
56 | /* Function to start a background worker, called from postmaster.c */ |
57 | extern void StartBackgroundWorker(void) pg_attribute_noreturn(); |
58 | |
59 | #ifdef EXEC_BACKEND |
60 | extern BackgroundWorker *BackgroundWorkerEntry(int slotno); |
61 | #endif |
62 | |
63 | #endif /* BGWORKER_INTERNALS_H */ |
64 |