PgSharedMemory
Namespace: Ankus
Assembly: Ankus.Runtime.dll
Registers unmanaged values in PostgreSQL’s named shared memory during shared preload.
public static class PgSharedMemoryRegister static descriptors from a PgModuleLoadAttribute method. Initialization runs when PostgreSQL creates shared memory, not while the descriptor is registered. Existing storage is attached without running its initializer or overwriting its contents.
Inheritance: object
Methods
Section titled “Methods”Initialize<T>(PgAtomic<T>)
Section titled “Initialize<T>(PgAtomic<T>)”Registers a zero-initialized atomic scalar.
public static void Initialize<T>(PgAtomic<T> storage) where T : unmanagedType parameters:
T
The supported unmanaged scalar type.
Parameters:
storage — PgAtomic<T>
The static named atomic descriptor.
Initialize<T>(PgAtomic<T>, Func<T>)
Section titled “Initialize<T>(PgAtomic<T>, Func<T>)”Registers an atomic scalar whose factory runs only when PostgreSQL creates its shared storage.
public static void Initialize<T>(PgAtomic<T> storage, Func<T> initializer) where T : unmanagedType parameters:
T
The supported unmanaged scalar type.
Parameters:
storage — PgAtomic<T>
The static named atomic descriptor.
initializer — Func<T>
The factory run at shared-memory startup.
Initialize<T>(PgLwLock<T>)
Section titled “Initialize<T>(PgLwLock<T>)”Registers a reader/writer lock with a zero-initialized value.
public static void Initialize<T>(PgLwLock<T> storage) where T : unmanagedType parameters:
T
The unmanaged value shared by PostgreSQL processes.
Parameters:
storage — PgLwLock<T>
The static named descriptor.
Initialize<T>(PgLwLock<T>, Func<T>)
Section titled “Initialize<T>(PgLwLock<T>, Func<T>)”Registers a reader/writer lock whose value is constructed at shared-memory startup.
public static void Initialize<T>(PgLwLock<T> storage, Func<T> initializer) where T : unmanagedType parameters:
T
The unmanaged value shared by PostgreSQL processes.
Parameters:
storage — PgLwLock<T>
The static named descriptor.
initializer — Func<T>
The factory used only when creating the shared value.
The value must contain no managed references or process-local addresses. The unmanaged constraint cannot establish that an embedded native address is valid in another process. Registration is idempotent for the same descriptor; another descriptor with the same name in one extension is rejected. Shared values and their locks live until PostgreSQL shuts down or recreates its shared memory after a backend crash; a replacement segment runs the initializer again.
Initialize<T>(PgShared<T>)
Section titled “Initialize<T>(PgShared<T>)”Registers a zero-initialized immutable shared value or aggregate of atomic values.
public static void Initialize<T>(PgShared<T> storage) where T : unmanagedType parameters:
T
The unmanaged aggregate type.
Parameters:
storage — PgShared<T>
The static named shared descriptor.
Initialize<T>(PgShared<T>, Func<T>)
Section titled “Initialize<T>(PgShared<T>, Func<T>)”Registers a shared aggregate whose factory runs only when PostgreSQL creates its storage.
public static void Initialize<T>(PgShared<T> storage, Func<T> initializer) where T : unmanagedType parameters:
T
The unmanaged aggregate type.
Parameters:
storage — PgShared<T>
The static named shared descriptor.
initializer — Func<T>
The factory run at shared-memory startup.
Initialize<THeader, TElement>(PgLwLock<THeader, TElement>, int)
Section titled “Initialize<THeader, TElement>(PgLwLock<THeader, TElement>, int)”Registers a lock-protected header and array of the given length, all zero.
public static void Initialize<THeader, TElement>(PgLwLock<THeader, TElement> storage, int length) where THeader : unmanaged where TElement : unmanagedType parameters:
THeader
The unmanaged header.
TElement
The unmanaged element.
Parameters:
storage — PgLwLock<THeader, TElement>
The static named descriptor.
length — int
The number of elements, such as a setting fixed at server start.
Initialize<THeader, TElement>(PgLwLock<THeader, TElement>, int, Func<THeader>, Func<int, TElement>)
Section titled “Initialize<THeader, TElement>(PgLwLock<THeader, TElement>, int, Func<THeader>, Func<int, TElement>)”Registers a lock-protected header and array whose values are built at shared-memory startup.
public static void Initialize<THeader, TElement>(PgLwLock<THeader, TElement> storage, int length, Func<THeader> header, Func<int, TElement> element) where THeader : unmanaged where TElement : unmanagedType parameters:
THeader
The unmanaged header.
TElement
The unmanaged element.
Parameters:
storage — PgLwLock<THeader, TElement>
The static named descriptor.
length — int
The number of elements, such as a setting fixed at server start.
header — Func<THeader>
The header’s factory, run only when PostgreSQL creates the storage.
element — Func<int, TElement>
Each element’s factory, given its index.
Every process must register the same length. Register from a PgModuleLoadAttribute method, where
settings such as max_worker_processes already have their server-start values.