@@ -388,10 +388,18 @@ PGSharedMemoryReAttach(void)
388
388
{
389
389
PGShmemHeader * hdr ;
390
390
void * origUsedShmemSegAddr = UsedShmemSegAddr ;
391
+ MEMORY_BASIC_INFORMATION previnfo ;
392
+ DWORD queryerr ;
391
393
392
394
Assert (UsedShmemSegAddr != NULL );
393
395
Assert (IsUnderPostmaster );
394
396
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
+
395
403
/*
396
404
* Release memory region reservation that was made by the postmaster
397
405
*/
@@ -405,12 +413,20 @@ PGSharedMemoryReAttach(void)
405
413
DWORD maperr = GetLastError ();
406
414
MEMORY_BASIC_INFORMATION info ;
407
415
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
+
408
424
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" ,
410
426
UsedShmemSegAddr , info .RegionSize ,
411
427
info .AllocationBase , info .State );
412
428
else
413
- elog (LOG , "VirtualQuery(%p) failed: error code %lu" ,
429
+ elog (LOG , "VirtualQuery(%p) after free failed: error code %lu" ,
414
430
UsedShmemSegAddr , GetLastError ());
415
431
416
432
elog (FATAL , "could not reattach to shared memory (key=%p, addr=%p): error code %lu" ,
0 commit comments