Skip to content

PgSharedMemory

Namespace: Ankus

Assembly: Ankus.Runtime.dll

Registers unmanaged values in PostgreSQL’s named shared memory during shared preload.

public static class PgSharedMemory

Register 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

Registers a zero-initialized atomic scalar.

public static void Initialize<T>(PgAtomic<T> storage) where T : unmanaged

Type parameters:

T

The supported unmanaged scalar type.

Parameters:

storage — PgAtomic<T>

The static named atomic descriptor.

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 : unmanaged

Type 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.

Registers a reader/writer lock with a zero-initialized value.

public static void Initialize<T>(PgLwLock<T> storage) where T : unmanaged

Type parameters:

T

The unmanaged value shared by PostgreSQL processes.

Parameters:

storage — PgLwLock<T>

The static named descriptor.

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 : unmanaged

Type 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.

Registers a zero-initialized immutable shared value or aggregate of atomic values.

public static void Initialize<T>(PgShared<T> storage) where T : unmanaged

Type parameters:

T

The unmanaged aggregate type.

Parameters:

storage — PgShared<T>

The static named shared descriptor.

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 : unmanaged

Type 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 : unmanaged

Type 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 : unmanaged

Type 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.