diff options
| author | Tom Lane | 2018-04-29 20:02:45 +0000 |
|---|---|---|
| committer | Tom Lane | 2018-04-29 20:02:45 +0000 |
| commit | 68e7e973d22274a089ce95200b3782f514f6d2f8 (patch) | |
| tree | be12652bcdde7ff3ca801fb6febf06b180d2018d | |
| parent | df629586e89751498d741f107b418d68bccc616e (diff) | |
Get more info about Windows can't-reattach-to-shared-memory errors.
Commit 63ca350ef neglected to probe the state of things *before*
the VirtualFree call, which now looks like it might be interesting.
Discussion: https://postgr.es/m/25495.1524517820@sss.pgh.pa.us
| -rw-r--r-- | src/backend/port/win32_shmem.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c index d431e0d0362..e724b3ef1a3 100644 --- a/src/backend/port/win32_shmem.c +++ b/src/backend/port/win32_shmem.c @@ -388,10 +388,18 @@ PGSharedMemoryReAttach(void) { PGShmemHeader *hdr; void *origUsedShmemSegAddr = UsedShmemSegAddr; + MEMORY_BASIC_INFORMATION previnfo; + DWORD queryerr; Assert(UsedShmemSegAddr != NULL); Assert(IsUnderPostmaster); + /* Preliminary probe of region we intend to release */ + if (VirtualQuery(UsedShmemSegAddr, &previnfo, sizeof(previnfo)) != 0) + queryerr = 0; + else + queryerr = GetLastError(); + /* * Release memory region reservation that was made by the postmaster */ @@ -405,12 +413,20 @@ PGSharedMemoryReAttach(void) DWORD maperr = GetLastError(); MEMORY_BASIC_INFORMATION info; + if (queryerr == 0) + elog(LOG, "VirtualQuery(%p) before free reports region of size %zu, base %p, has state 0x%lx", + UsedShmemSegAddr, previnfo.RegionSize, + previnfo.AllocationBase, previnfo.State); + else + elog(LOG, "VirtualQuery(%p) before free failed: error code %lu", + UsedShmemSegAddr, queryerr); + if (VirtualQuery(UsedShmemSegAddr, &info, sizeof(info)) != 0) - elog(LOG, "VirtualQuery(%p) reports region of size %zu, base %p, has state 0x%lx", + elog(LOG, "VirtualQuery(%p) after free reports region of size %zu, base %p, has state 0x%lx", UsedShmemSegAddr, info.RegionSize, info.AllocationBase, info.State); else - elog(LOG, "VirtualQuery(%p) failed: error code %lu", + elog(LOG, "VirtualQuery(%p) after free failed: error code %lu", UsedShmemSegAddr, GetLastError()); elog(FATAL, "could not reattach to shared memory (key=%p, addr=%p): error code %lu", |
