mirror of
https://github.com/postgres/postgres.git
synced 2025-07-14 08:21:07 +03:00
Get rid of the dynamic shared memory state file.
Instead of storing the ID of the dynamic shared memory control segment in a file within the data directory, store it in the main control segment. This avoids a number of nasty corner cases, most seriously that doing an online backup and then using it on the same machine (e.g. to fire up a standby) would result in the standby clobbering all of the master's dynamic shared memory segments. Per complaints from Heikki Linnakangas, Fujii Masao, and Tom Lane.
This commit is contained in:
@ -117,7 +117,8 @@ PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2)
|
||||
*
|
||||
*/
|
||||
PGShmemHeader *
|
||||
PGSharedMemoryCreate(Size size, bool makePrivate, int port)
|
||||
PGSharedMemoryCreate(Size size, bool makePrivate, int port,
|
||||
PGShmemHeader **shim)
|
||||
{
|
||||
void *memAddress;
|
||||
PGShmemHeader *hdr;
|
||||
@ -245,12 +246,14 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port)
|
||||
*/
|
||||
hdr->totalsize = size;
|
||||
hdr->freeoffset = MAXALIGN(sizeof(PGShmemHeader));
|
||||
hdr->dsm_control = 0;
|
||||
|
||||
/* Save info for possible future use */
|
||||
UsedShmemSegAddr = memAddress;
|
||||
UsedShmemSegSize = size;
|
||||
UsedShmemSegID = hmap2;
|
||||
|
||||
*shim = NULL;
|
||||
return hdr;
|
||||
}
|
||||
|
||||
@ -289,6 +292,7 @@ PGSharedMemoryReAttach(void)
|
||||
hdr, origUsedShmemSegAddr);
|
||||
if (hdr->magic != PGShmemMagic)
|
||||
elog(FATAL, "reattaching to shared memory returned non-PostgreSQL memory");
|
||||
dsm_set_control_handle(hdr->dsm_control);
|
||||
|
||||
UsedShmemSegAddr = hdr; /* probably redundant */
|
||||
}
|
||||
|
Reference in New Issue
Block a user