123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /*-------------------------------------------------------------------------
- *
- * pg_shmem.h
- * Platform-independent API for shared memory support.
- *
- * Every port is expected to support shared memory with approximately
- * SysV-ish semantics; in particular, a memory block is not anonymous
- * but has an ID, and we must be able to tell whether there are any
- * remaining processes attached to a block of a specified ID.
- *
- * To simplify life for the SysV implementation, the ID is assumed to
- * consist of two unsigned long values (these are key and ID in SysV
- * terms). Other platforms may ignore the second value if they need
- * only one ID number.
- *
- *
- * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/storage/pg_shmem.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef PG_SHMEM_H
- #define PG_SHMEM_H
- #include "storage/dsm_impl.h"
- typedef struct PGShmemHeader /* standard header for all Postgres shmem */
- {
- int32 magic; /* magic # to identify Postgres segments */
- #define PGShmemMagic 679834894
- pid_t creatorPID; /* PID of creating process */
- Size totalsize; /* total size of segment */
- Size freeoffset; /* offset to first free space */
- dsm_handle dsm_control; /* ID of dynamic shared memory control seg */
- void *index; /* pointer to ShmemIndex table */
- #ifndef WIN32 /* Windows doesn't have useful inode#s */
- dev_t device; /* device data directory is on */
- ino_t inode; /* inode number of data directory */
- #endif
- } PGShmemHeader;
- /* GUC variable */
- extern int huge_pages;
- /* Possible values for huge_pages */
- typedef enum
- {
- HUGE_PAGES_OFF,
- HUGE_PAGES_ON,
- HUGE_PAGES_TRY
- } HugePagesType;
- #ifndef WIN32
- extern unsigned long UsedShmemSegID;
- #else
- extern HANDLE UsedShmemSegID;
- #endif
- extern void *UsedShmemSegAddr;
- #ifdef EXEC_BACKEND
- extern void PGSharedMemoryReAttach(void);
- extern void PGSharedMemoryNoReAttach(void);
- #endif
- extern PGShmemHeader *PGSharedMemoryCreate(Size size, bool makePrivate,
- int port, PGShmemHeader **shim);
- extern bool PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2);
- extern void PGSharedMemoryDetach(void);
- #endif /* PG_SHMEM_H */
|