Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
ipc.h85 linesDownload Raw Back to storage
1/*-------------------------------------------------------------------------2 *3 * ipc.h4 *	  POSTGRES inter-process communication definitions.5 *6 * This file is misnamed, as it no longer has much of anything directly7 * to do with IPC.  The functionality here is concerned with managing8 * exit-time cleanup for either a postmaster or a backend.9 *10 *11 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group12 * Portions Copyright (c) 1994, Regents of the University of California13 *14 * src/include/storage/ipc.h15 *16 *-------------------------------------------------------------------------17 */18#ifndef IPC_H19#define IPC_H20 21typedef void (*pg_on_exit_callback) (int code, Datum arg);22typedef void (*shmem_startup_hook_type) (void);23 24/*----------25 * API for handling cleanup that must occur during either ereport(ERROR)26 * or ereport(FATAL) exits from a block of code.  (Typical examples are27 * undoing transient changes to shared-memory state.)28 *29 *		PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg);30 *		{31 *			... code that might throw ereport(ERROR) or ereport(FATAL) ...32 *		}33 *		PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg);34 *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 function37 * needs.38 *39 * This construct ensures that cleanup_function() will be called during40 * either ERROR or FATAL exits.  It will not be called on successful41 * exit from the controlled code.  (If you want it to happen then too,42 * call the function yourself from just after the construct.)43 *44 * Note: the macro arguments are multiply evaluated, so avoid side-effects.45 *----------46 */47#define PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg)	\48	do { \49		before_shmem_exit(cleanup_function, arg); \50		PG_TRY()51 52#define PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg)	\53		cancel_before_shmem_exit(cleanup_function, arg); \54		PG_CATCH(); \55		{ \56			cancel_before_shmem_exit(cleanup_function, arg); \57			cleanup_function (0, arg); \58			PG_RE_THROW(); \59		} \60		PG_END_TRY(); \61	} while (0)62 63 64/* ipc.c */65extern PGDLLIMPORT bool proc_exit_inprogress;66extern PGDLLIMPORT bool shmem_exit_inprogress;67 68extern void proc_exit(int code) pg_attribute_noreturn();69extern void shmem_exit(int code);70extern void on_proc_exit(pg_on_exit_callback function, Datum arg);71extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);72extern void before_shmem_exit(pg_on_exit_callback function, Datum arg);73extern void cancel_before_shmem_exit(pg_on_exit_callback function, Datum arg);74extern void on_exit_reset(void);75extern void check_on_shmem_exit_lists_are_empty(void);76 77/* ipci.c */78extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook;79 80extern Size CalculateShmemSize(int *num_semaphores);81extern void CreateSharedMemoryAndSemaphores(void);82extern void InitializeShmemGUCs(void);83 84#endif							/* IPC_H */85 
codekingpro/portable-devtools · Team Ai