PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
shmem.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * shmem.h
4 * shared memory management structures
5 *
6 * Historical note:
7 * A long time ago, Postgres' shared memory region was allowed to be mapped
8 * at a different address in each process, and shared memory "pointers" were
9 * passed around as offsets relative to the start of the shared memory region.
10 * That is no longer the case: each process must map the shared memory region
11 * at the same address. This means shared memory pointers can be passed
12 * around directly between different processes.
13 *
14 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
15 * Portions Copyright (c) 1994, Regents of the University of California
16 *
17 * src/include/storage/shmem.h
18 *
19 *-------------------------------------------------------------------------
20 */
21#ifndef SHMEM_H
22#define SHMEM_H
23
24#include "storage/spin.h"
25#include "utils/hsearch.h"
26
27
28/* shmem.c */
29extern PGDLLIMPORT slock_t *ShmemLock;
30struct PGShmemHeader; /* avoid including storage/pg_shmem.h here */
31extern void InitShmemAccess(struct PGShmemHeader *seghdr);
32extern void InitShmemAllocation(void);
33extern void *ShmemAlloc(Size size);
34extern void *ShmemAllocNoError(Size size);
35extern void *ShmemAllocUnlocked(Size size);
36extern bool ShmemAddrIsValid(const void *addr);
37extern void InitShmemIndex(void);
38extern HTAB *ShmemInitHash(const char *name, long init_size, long max_size,
39 HASHCTL *infoP, int hash_flags);
40extern void *ShmemInitStruct(const char *name, Size size, bool *foundPtr);
41extern Size add_size(Size s1, Size s2);
42extern Size mul_size(Size s1, Size s2);
43
45
46/* ipci.c */
47extern void RequestAddinShmemSpace(Size size);
48
49/* size constants for the shmem index table */
50 /* max size of data structure string name */
51#define SHMEM_INDEX_KEYSIZE (48)
52 /* estimated size of the shmem index table (not a hard limit) */
53#define SHMEM_INDEX_SIZE (64)
54
55/* this is a hash bucket in the shmem index table */
56typedef struct
57{
58 char key[SHMEM_INDEX_KEYSIZE]; /* string name */
59 void *location; /* location in shared mem */
60 Size size; /* # bytes requested for the structure */
61 Size allocated_size; /* # bytes actually allocated */
63
64#endif /* SHMEM_H */
#define PGDLLIMPORT
Definition: c.h:1291
size_t Size
Definition: c.h:576
char * s1
char * s2
bool ShmemAddrIsValid(const void *addr)
Definition: shmem.c:274
HTAB * ShmemInitHash(const char *name, long init_size, long max_size, HASHCTL *infoP, int hash_flags)
Definition: shmem.c:332
void InitShmemIndex(void)
Definition: shmem.c:283
Size add_size(Size s1, Size s2)
Definition: shmem.c:493
void InitShmemAccess(struct PGShmemHeader *seghdr)
Definition: shmem.c:102
void * ShmemAllocUnlocked(Size size)
Definition: shmem.c:238
PGDLLIMPORT Size pg_get_shmem_pagesize(void)
Definition: shmem.c:742
PGDLLIMPORT slock_t * ShmemLock
Definition: shmem.c:88
void * ShmemAllocNoError(Size size)
Definition: shmem.c:172
Size mul_size(Size s1, Size s2)
Definition: shmem.c:510
void * ShmemAlloc(Size size)
Definition: shmem.c:152
void InitShmemAllocation(void)
Definition: shmem.c:115
void RequestAddinShmemSpace(Size size)
Definition: ipci.c:75
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
Definition: shmem.c:387
#define SHMEM_INDEX_KEYSIZE
Definition: shmem.h:51
Definition: dynahash.c:220
void * location
Definition: shmem.h:59
Size size
Definition: shmem.h:60
Size allocated_size
Definition: shmem.h:61
const char * name