Harmonize parameter names in ecpg code.
[pgsql.git] / src / include / storage / pg_shmem.h
blobda5962edb9f21cde1eac07551ea8f570d0a1361a
1 /*-------------------------------------------------------------------------
3 * pg_shmem.h
4 * Platform-independent API for shared memory support.
6 * Every port is expected to support shared memory with approximately
7 * SysV-ish semantics; in particular, a memory block is not anonymous
8 * but has an ID, and we must be able to tell whether there are any
9 * remaining processes attached to a block of a specified ID.
11 * To simplify life for the SysV implementation, the ID is assumed to
12 * consist of two unsigned long values (these are key and ID in SysV
13 * terms). Other platforms may ignore the second value if they need
14 * only one ID number.
17 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
18 * Portions Copyright (c) 1994, Regents of the University of California
20 * src/include/storage/pg_shmem.h
22 *-------------------------------------------------------------------------
24 #ifndef PG_SHMEM_H
25 #define PG_SHMEM_H
27 #include "storage/dsm_impl.h"
29 typedef struct PGShmemHeader /* standard header for all Postgres shmem */
31 int32 magic; /* magic # to identify Postgres segments */
32 #define PGShmemMagic 679834894
33 pid_t creatorPID; /* PID of creating process (set but unread) */
34 Size totalsize; /* total size of segment */
35 Size freeoffset; /* offset to first free space */
36 dsm_handle dsm_control; /* ID of dynamic shared memory control seg */
37 void *index; /* pointer to ShmemIndex table */
38 #ifndef WIN32 /* Windows doesn't have useful inode#s */
39 dev_t device; /* device data directory is on */
40 ino_t inode; /* inode number of data directory */
41 #endif
42 } PGShmemHeader;
44 /* GUC variables */
45 extern PGDLLIMPORT int shared_memory_type;
46 extern PGDLLIMPORT int huge_pages;
47 extern PGDLLIMPORT int huge_page_size;
49 /* Possible values for huge_pages */
50 typedef enum
52 HUGE_PAGES_OFF,
53 HUGE_PAGES_ON,
54 HUGE_PAGES_TRY
55 } HugePagesType;
57 /* Possible values for shared_memory_type */
58 typedef enum
60 SHMEM_TYPE_WINDOWS,
61 SHMEM_TYPE_SYSV,
62 SHMEM_TYPE_MMAP
63 } PGShmemType;
65 #ifndef WIN32
66 extern PGDLLIMPORT unsigned long UsedShmemSegID;
67 #else
68 extern PGDLLIMPORT HANDLE UsedShmemSegID;
69 extern PGDLLIMPORT void *ShmemProtectiveRegion;
70 #endif
71 extern PGDLLIMPORT void *UsedShmemSegAddr;
73 #if !defined(WIN32) && !defined(EXEC_BACKEND)
74 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_MMAP
75 #elif !defined(WIN32)
76 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_SYSV
77 #else
78 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_WINDOWS
79 #endif
81 #ifdef EXEC_BACKEND
82 extern void PGSharedMemoryReAttach(void);
83 extern void PGSharedMemoryNoReAttach(void);
84 #endif
86 extern PGShmemHeader *PGSharedMemoryCreate(Size size,
87 PGShmemHeader **shim);
88 extern bool PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2);
89 extern void PGSharedMemoryDetach(void);
90 extern void GetHugePageSize(Size *hugepagesize, int *mmap_flags);
92 #endif /* PG_SHMEM_H */