init
This commit is contained in:
79
pg_include/storage/ipc.h
Executable file
79
pg_include/storage/ipc.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* ipc.h
|
||||
* POSTGRES inter-process communication definitions.
|
||||
*
|
||||
* This file is misnamed, as it no longer has much of anything directly
|
||||
* to do with IPC. The functionality here is concerned with managing
|
||||
* exit-time cleanup for either a postmaster or a backend.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/storage/ipc.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef IPC_H
|
||||
#define IPC_H
|
||||
|
||||
typedef void (*pg_on_exit_callback) (int code, Datum arg);
|
||||
typedef void (*shmem_startup_hook_type) (void);
|
||||
|
||||
/*----------
|
||||
* API for handling cleanup that must occur during either ereport(ERROR)
|
||||
* or ereport(FATAL) exits from a block of code. (Typical examples are
|
||||
* undoing transient changes to shared-memory state.)
|
||||
*
|
||||
* PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
|
||||
* {
|
||||
* ... code that might throw ereport(ERROR) or ereport(FATAL) ...
|
||||
* }
|
||||
* PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
|
||||
*
|
||||
* where the cleanup code is in a function declared per pg_on_exit_callback.
|
||||
* The Datum value "arg" can carry any information the cleanup function
|
||||
* needs.
|
||||
*
|
||||
* This construct ensures that cleanup_function() will be called during
|
||||
* either ERROR or FATAL exits. It will not be called on successful
|
||||
* exit from the controlled code. (If you want it to happen then too,
|
||||
* call the function yourself from just after the construct.)
|
||||
*
|
||||
* Note: the macro arguments are multiply evaluated, so avoid side-effects.
|
||||
*----------
|
||||
*/
|
||||
#define PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
|
||||
do { \
|
||||
on_shmem_exit(cleanup_function, arg); \
|
||||
PG_TRY()
|
||||
|
||||
#define PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
|
||||
cancel_shmem_exit(cleanup_function, arg); \
|
||||
PG_CATCH(); \
|
||||
{ \
|
||||
cancel_shmem_exit(cleanup_function, arg); \
|
||||
cleanup_function (0, arg); \
|
||||
PG_RE_THROW(); \
|
||||
} \
|
||||
PG_END_TRY(); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* ipc.c */
|
||||
extern bool proc_exit_inprogress;
|
||||
|
||||
extern void proc_exit(int code);
|
||||
extern void shmem_exit(int code);
|
||||
extern void on_proc_exit(pg_on_exit_callback function, Datum arg);
|
||||
extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
|
||||
extern void cancel_shmem_exit(pg_on_exit_callback function, Datum arg);
|
||||
extern void on_exit_reset(void);
|
||||
|
||||
/* ipci.c */
|
||||
extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook;
|
||||
|
||||
extern void CreateSharedMemoryAndSemaphores(bool makePrivate, int port);
|
||||
|
||||
#endif /* IPC_H */
|
||||
Reference in New Issue
Block a user