bgworker_internals.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*--------------------------------------------------------------------
  2. * bgworker_internals.h
  3. * POSTGRES pluggable background workers internals
  4. *
  5. * Portions Copyright (c) 1996-2016, 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. #include "datatype/timestamp.h"
  15. #include "lib/ilist.h"
  16. #include "postmaster/bgworker.h"
  17. /*
  18. * List of background workers, private to postmaster.
  19. *
  20. * A worker that requests a database connection during registration will have
  21. * rw_backend set, and will be present in BackendList. Note: do not rely on
  22. * rw_backend being non-NULL for shmem-connected workers!
  23. */
  24. typedef struct RegisteredBgWorker
  25. {
  26. BackgroundWorker rw_worker; /* its registry entry */
  27. struct bkend *rw_backend; /* its BackendList entry, or NULL */
  28. pid_t rw_pid; /* 0 if not running */
  29. int rw_child_slot;
  30. TimestampTz rw_crashed_at; /* if not 0, time it last crashed */
  31. int rw_shmem_slot;
  32. bool rw_terminate;
  33. slist_node rw_lnode; /* list link */
  34. } RegisteredBgWorker;
  35. extern slist_head BackgroundWorkerList;
  36. extern Size BackgroundWorkerShmemSize(void);
  37. extern void BackgroundWorkerShmemInit(void);
  38. extern void BackgroundWorkerStateChange(void);
  39. extern void ForgetBackgroundWorker(slist_mutable_iter *cur);
  40. extern void ReportBackgroundWorkerPID(RegisteredBgWorker *);
  41. extern void BackgroundWorkerStopNotifications(pid_t pid);
  42. extern void ResetBackgroundWorkerCrashTimes(void);
  43. /* Function to start a background worker, called from postmaster.c */
  44. extern void StartBackgroundWorker(void) pg_attribute_noreturn();
  45. #ifdef EXEC_BACKEND
  46. extern BackgroundWorker *BackgroundWorkerEntry(int slotno);
  47. #endif
  48. #endif /* BGWORKER_INTERNALS_H */