PostgreSQL Source Code git master
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;
30typedef struct PGShmemHeader PGShmemHeader; /* avoid including
31 * storage/pg_shmem.h here */
32extern void InitShmemAccess(PGShmemHeader *seghdr);
33extern void InitShmemAllocation(void);
34extern void *ShmemAlloc(Size size);
35extern void *ShmemAllocNoError(Size size);
36extern bool ShmemAddrIsValid(const void *addr);
37extern void InitShmemIndex(void);
38extern HTAB *ShmemInitHash(const char *name, int64 init_size, int64 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:1310
int64_t int64
Definition: c.h:540
size_t Size
Definition: c.h:615
char * s1
char * s2
bool ShmemAddrIsValid(const void *addr)
Definition: shmem.c:276
void InitShmemIndex(void)
Definition: shmem.c:285
void InitShmemAccess(PGShmemHeader *seghdr)
Definition: shmem.c:104
Size add_size(Size s1, Size s2)
Definition: shmem.c:495
PGDLLIMPORT Size pg_get_shmem_pagesize(void)
Definition: shmem.c:733
PGDLLIMPORT slock_t * ShmemLock
Definition: shmem.c:90
void * ShmemAllocNoError(Size size)
Definition: shmem.c:174
Size mul_size(Size s1, Size s2)
Definition: shmem.c:510
void * ShmemAlloc(Size size)
Definition: shmem.c:154
HTAB * ShmemInitHash(const char *name, int64 init_size, int64 max_size, HASHCTL *infoP, int hash_flags)
Definition: shmem.c:334
void InitShmemAllocation(void)
Definition: shmem.c:117
void RequestAddinShmemSpace(Size size)
Definition: ipci.c:75
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
Definition: shmem.c:389
#define SHMEM_INDEX_KEYSIZE
Definition: shmem.h:51
Definition: dynahash.c:222
void * location
Definition: shmem.h:59
Size size
Definition: shmem.h:60
Size allocated_size
Definition: shmem.h:61
const char * name