1 /*-------------------------------------------------------------------------
4 * POSTGRES inter-process communication definitions.
6 * This file is misnamed, as it no longer has much of anything directly
7 * to do with IPC. The functionality here is concerned with managing
8 * exit-time cleanup for either a postmaster or a backend.
11 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
12 * Portions Copyright (c) 1994, Regents of the University of California
14 * src/include/storage/ipc.h
16 *-------------------------------------------------------------------------
21 typedef void (*pg_on_exit_callback
) (int code
, Datum arg
);
22 typedef void (*shmem_startup_hook_type
) (void);
25 * API for handling cleanup that must occur during either ereport(ERROR)
26 * or ereport(FATAL) exits from a block of code. (Typical examples are
27 * undoing transient changes to shared-memory state.)
29 * PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
31 * ... code that might throw ereport(ERROR) or ereport(FATAL) ...
33 * PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
35 * where the cleanup code is in a function declared per pg_on_exit_callback.
36 * The Datum value "arg" can carry any information the cleanup function
39 * This construct ensures that cleanup_function() will be called during
40 * either ERROR or FATAL exits. It will not be called on successful
41 * exit from the controlled code. (If you want it to happen then too,
42 * call the function yourself from just after the construct.)
44 * Note: the macro arguments are multiply evaluated, so avoid side-effects.
47 #define PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
49 before_shmem_exit(cleanup_function, arg); \
52 #define PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
53 cancel_before_shmem_exit(cleanup_function, arg); \
56 cancel_before_shmem_exit(cleanup_function, arg); \
57 cleanup_function (0, arg); \
65 extern PGDLLIMPORT
bool proc_exit_inprogress
;
66 extern PGDLLIMPORT
bool shmem_exit_inprogress
;
68 extern void proc_exit(int code
) pg_attribute_noreturn();
69 extern void shmem_exit(int code
);
70 extern void on_proc_exit(pg_on_exit_callback function
, Datum arg
);
71 extern void on_shmem_exit(pg_on_exit_callback function
, Datum arg
);
72 extern void before_shmem_exit(pg_on_exit_callback function
, Datum arg
);
73 extern void cancel_before_shmem_exit(pg_on_exit_callback function
, Datum arg
);
74 extern void on_exit_reset(void);
75 extern void check_on_shmem_exit_lists_are_empty(void);
78 extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook
;
80 extern Size
CalculateShmemSize(int *num_semaphores
);
81 extern void CreateSharedMemoryAndSemaphores(void);
82 extern void InitializeShmemGUCs(void);