aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/port/win32_shmem.c20
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",