/* *InitializeorattachtothedynamicsharedhashtablethatstorestheDSM *registryentries,ifnotalreadydone.Thismustbecalledbeforeaccessing *thetable.
*/ staticvoid
init_dsm_registry(void)
{ /* Quick exit if we already did this. */ if (dsm_registry_table) return;
/* Otherwise, use a lock to ensure only one process creates the table. */
LWLockAcquire(DSMRegistryLock, LW_EXCLUSIVE);
if (!name || *name == '\0')
ereport(ERROR,
(errmsg("DSM segment name cannot be empty")));
if (strlen(name) >= offsetof(DSMRegistryEntry, handle))
ereport(ERROR,
(errmsg("DSM segment name too long")));
if (size == 0)
ereport(ERROR,
(errmsg("DSM segment size must be nonzero")));
/* Be sure any local memory allocated by DSM/DSA routines is persistent. */
oldcontext = MemoryContextSwitchTo(TopMemoryContext);
/* Connect to the registry. */
init_dsm_registry();
entry = dshash_find_or_insert(dsm_registry_table, name, found); if (!(*found))
{
entry->handle = DSM_HANDLE_INVALID;
entry->size = size;
} elseif (entry->size != size)
ereport(ERROR,
(errmsg("requested DSM segment size does not match size of existing segment")));
if (entry->handle == DSM_HANDLE_INVALID)
{
*found = false;
/* Initialize the segment. */
seg = dsm_create(size, 0);
if (init_callback)
(*init_callback) (dsm_segment_address(seg));
dsm_pin_segment(seg);
dsm_pin_mapping(seg);
entry->handle = dsm_segment_handle(seg);
} else
{ /* If the existing segment is not already attached, attach it now. */
seg = dsm_find_mapping(entry->handle); if (seg == NULL)
{
seg = dsm_attach(entry->handle); if (seg == NULL)
elog(ERROR, "could not map dynamic shared memory segment");
dsm_pin_mapping(seg);
}
}
ret = dsm_segment_address(seg);
dshash_release_lock(dsm_registry_table, entry);
MemoryContextSwitchTo(oldcontext);
return ret;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.