]> granicus.if.org Git - postgresql/commit
Avoid "could not reattach" by providing space for concurrent allocation.
authorNoah Misch <noah@leadboat.com>
Tue, 9 Apr 2019 04:39:00 +0000 (21:39 -0700)
committerNoah Misch <noah@leadboat.com>
Tue, 9 Apr 2019 04:39:05 +0000 (21:39 -0700)
commit203886d3ae22495241a95207e7b62bf859c389c5
treeaf9659dc6894eacc9b0551a4e6b5f6faaaa524ba
parentc6df3a28ff40ca7124ea6c28adf2e3ff9910faee
Avoid "could not reattach" by providing space for concurrent allocation.

We've long had reports of intermittent "could not reattach to shared
memory" errors on Windows.  Buildfarm member dory fails that way when
PGSharedMemoryReAttach() execution overlaps with creation of a thread
for the process's "default thread pool".  Fix that by providing a second
region to receive asynchronous allocations that would otherwise intrude
into UsedShmemSegAddr.  In pgwin32_ReserveSharedMemoryRegion(), stop
trying to free reservations landing at incorrect addresses; the caller's
next step has been to terminate the affected process.  Back-patch to 9.4
(all supported versions).

Reviewed by Tom Lane.  He also did much of the prerequisite research;
see commit bcbf2346d69f6006f126044864dd9383d50d87b4.

Discussion: https://postgr.es/m/20190402135442.GA1173872@rfd.leadboat.com
src/backend/port/win32_shmem.c
src/backend/postmaster/postmaster.c
src/include/storage/pg_shmem.h