@@ -388,10 +388,18 @@ PGSharedMemoryReAttach(void)
388388{
389389 PGShmemHeader * hdr ;
390390 void * origUsedShmemSegAddr = UsedShmemSegAddr ;
391+ MEMORY_BASIC_INFORMATION previnfo ;
392+ DWORD queryerr ;
391393
392394 Assert (UsedShmemSegAddr != NULL );
393395 Assert (IsUnderPostmaster );
394396
397+ /* Preliminary probe of region we intend to release */
398+ if (VirtualQuery (UsedShmemSegAddr , & previnfo , sizeof (previnfo )) != 0 )
399+ queryerr = 0 ;
400+ else
401+ queryerr = GetLastError ();
402+
395403 /*
396404 * Release memory region reservation that was made by the postmaster
397405 */
@@ -405,12 +413,20 @@ PGSharedMemoryReAttach(void)
405413 DWORD maperr = GetLastError ();
406414 MEMORY_BASIC_INFORMATION info ;
407415
416+ if (queryerr == 0 )
417+ elog (LOG , "VirtualQuery(%p) before free reports region of size %zu, base %p, has state 0x%lx" ,
418+ UsedShmemSegAddr , previnfo .RegionSize ,
419+ previnfo .AllocationBase , previnfo .State );
420+ else
421+ elog (LOG , "VirtualQuery(%p) before free failed: error code %lu" ,
422+ UsedShmemSegAddr , queryerr );
423+
408424 if (VirtualQuery (UsedShmemSegAddr , & info , sizeof (info )) != 0 )
409- elog (LOG , "VirtualQuery(%p) reports region of size %zu, base %p, has state 0x%lx" ,
425+ elog (LOG , "VirtualQuery(%p) after free reports region of size %zu, base %p, has state 0x%lx" ,
410426 UsedShmemSegAddr , info .RegionSize ,
411427 info .AllocationBase , info .State );
412428 else
413- elog (LOG , "VirtualQuery(%p) failed: error code %lu" ,
429+ elog (LOG , "VirtualQuery(%p) after free failed: error code %lu" ,
414430 UsedShmemSegAddr , GetLastError ());
415431
416432 elog (FATAL , "could not reattach to shared memory (key=%p, addr=%p): error code %lu" ,
0 commit comments