1 /*------------------------------------------------------------------------- 2 * 3 * dsm_impl.h 4 * low-level dynamic shared memory primitives 5 * 6 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group 7 * Portions Copyright (c) 1994, Regents of the University of California 8 * 9 * src/include/storage/dsm_impl.h 10 * 11 *------------------------------------------------------------------------- 12 */ 13 #ifndef DSM_IMPL_H 14 #define DSM_IMPL_H 15 16 /* Dynamic shared memory implementations. */ 17 #define DSM_IMPL_POSIX 1 18 #define DSM_IMPL_SYSV 2 19 #define DSM_IMPL_WINDOWS 3 20 #define DSM_IMPL_MMAP 4 21 22 /* 23 * Determine which dynamic shared memory implementations will be supported 24 * on this platform, and which one will be the default. 25 */ 26 #ifdef WIN32 27 #define USE_DSM_WINDOWS 28 #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_WINDOWS 29 #else 30 #ifdef HAVE_SHM_OPEN 31 #define USE_DSM_POSIX 32 #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_POSIX 33 #endif 34 #define USE_DSM_SYSV 35 #ifndef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE 36 #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_SYSV 37 #endif 38 #define USE_DSM_MMAP 39 #endif 40 41 /* GUC. */ 42 extern int dynamic_shared_memory_type; 43 extern int min_dynamic_shared_memory; 44 45 /* 46 * Directory for on-disk state. 47 * 48 * This is used by all implementations for crash recovery and by the mmap 49 * implementation for storage. 50 */ 51 #define PG_DYNSHMEM_DIR "pg_dynshmem" 52 #define PG_DYNSHMEM_MMAP_FILE_PREFIX "mmap." 53 54 /* A "name" for a dynamic shared memory segment. */ 55 typedef uint32 dsm_handle; 56 57 /* All the shared-memory operations we know about. */ 58 typedef enum 59 { 60 DSM_OP_CREATE, 61 DSM_OP_ATTACH, 62 DSM_OP_DETACH, 63 DSM_OP_DESTROY 64 } dsm_op; 65 66 /* Create, attach to, detach from, resize, or destroy a segment. */ 67 extern bool dsm_impl_op(dsm_op op, dsm_handle handle, Size request_size, 68 void **impl_private, void **mapped_address, Size *mapped_size, 69 int elevel); 70 71 /* Implementation-dependent actions required to keep segment until shutdown. */ 72 extern void dsm_impl_pin_segment(dsm_handle handle, void *impl_private, 73 void **impl_private_pm_handle); 74 extern void dsm_impl_unpin_segment(dsm_handle handle, void **impl_private); 75 76 #endif /* DSM_IMPL_H */ 77