From f7df8043f08a9d00811fb4aa054ed3221f5f9b5e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 30 Apr 2018 13:20:13 -0400 Subject: [PATCH] Remove Windows module-list-dumping code. This code is evidently allocating memory and thus confusing matters even more. Let's see whether we can learn anything with just VirtualQuery. Discussion: https://postgr.es/m/25495.1524517820@sss.pgh.pa.us --- src/backend/Makefile | 2 +- src/backend/port/win32_shmem.c | 48 +++++++--------------------------- src/makefiles/Makefile.win32 | 2 -- src/tools/msvc/Mkvcbuild.pm | 2 -- 4 files changed, 10 insertions(+), 44 deletions(-) diff --git a/src/backend/Makefile b/src/backend/Makefile index f9215cdbb5..1aaf1ec2f5 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -79,7 +79,7 @@ libpostgres.a: postgres endif # cygwin ifeq ($(PORTNAME), win32) -LIBS += -lsecur32 -lpsapi +LIBS += -lsecur32 postgres: $(OBJS) $(WIN32RES) $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) -Wl,--stack=$(WIN32_STACK_RLIMIT) -Wl,--export-all-symbols -Wl,--out-implib=libpostgres.a $(call expand_subsys,$(OBJS)) $(WIN32RES) $(LIBS) -o $@$(X) diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c index 7402052ce6..9e42665ed6 100644 --- a/src/backend/port/win32_shmem.c +++ b/src/backend/port/win32_shmem.c @@ -12,8 +12,6 @@ */ #include "postgres.h" -#include - #include "miscadmin.h" #include "storage/dsm.h" #include "storage/ipc.h" @@ -26,32 +24,6 @@ static Size UsedShmemSegSize = 0; static bool EnableLockPagesPrivilege(int elevel); static void pgwin32_SharedMemoryDelete(int status, Datum shmId); -/* Dump all modules loaded into proc */ -static void -dumpdlls(HANDLE proc) -{ - HMODULE dll[1024]; - DWORD size_used = 1; - int i, - n; - - if (!EnumProcessModules(proc, dll, sizeof(dll), &size_used)) - { - elog(LOG, "EnumProcessModules failed: %lu", GetLastError()); - return; - } - n = (int) (size_used / sizeof(*dll)); - elog(LOG, "EnumProcessModules: %d modules in process 0x%p", n, proc); - for (i = 0; i < n; i++) - { - char name[MAXPGPATH]; - - if (!GetModuleFileNameEx(proc, dll[i], name, sizeof(name))) - sprintf(name, "GetModuleFileNameEx failed: %lu", GetLastError()); - elog(LOG, "%d: 0x%p %s", i + 1, dll[i], name); - } -} - static const char * mi_type(DWORD code) { @@ -83,7 +55,7 @@ mi_state(DWORD code) } static void -dumpmem(const char *reason, HANDLE proc) +dumpmem(const char *reason) { char *addr = 0; MEMORY_BASIC_INFORMATION mi; @@ -92,11 +64,11 @@ dumpmem(const char *reason, HANDLE proc) do { memset(&mi, 0, sizeof(mi)); - if (!VirtualQueryEx(proc, addr, &mi, sizeof(mi))) + if (!VirtualQuery(addr, &mi, sizeof(mi))) { if (GetLastError() == ERROR_INVALID_PARAMETER) break; - elog(LOG, "VirtualQueryEx failed: %lu", GetLastError()); + elog(LOG, "VirtualQuery failed: %lu", GetLastError()); break; } elog(LOG, "0x%p+0x%p %s (alloc 0x%p) %s", @@ -104,8 +76,6 @@ dumpmem(const char *reason, HANDLE proc) mi_type(mi.Type), mi.AllocationBase, mi_state(mi.State)); addr += mi.RegionSize; } while (addr > 0); - - dumpdlls(proc); } /* @@ -446,7 +416,7 @@ retry: /* Log information about the segment's virtual memory use */ if (VirtualQuery(memAddress, &info, sizeof(info)) != 0) - elog(LOG, "mapped shared memory segment at %p, requested size %zu, mapped size %zu", + elog(LOG, "mapped shared memory segment at %p, requested size 0x%zx, mapped size 0x%zx", memAddress, size, info.RegionSize); else elog(LOG, "VirtualQuery(%p) failed: error code %lu", @@ -476,7 +446,7 @@ PGSharedMemoryReAttach(void) Assert(UsedShmemSegAddr != NULL); Assert(IsUnderPostmaster); - dumpmem("before VirtualFree", GetCurrentProcess()); + dumpmem("before VirtualFree"); /* * Release memory region reservation that was made by the postmaster @@ -485,18 +455,20 @@ PGSharedMemoryReAttach(void) elog(FATAL, "failed to release reserved memory region (addr=%p): error code %lu", UsedShmemSegAddr, GetLastError()); - dumpmem("after VirtualFree", GetCurrentProcess()); + dumpmem("after VirtualFree"); hdr = (PGShmemHeader *) MapViewOfFileEx(UsedShmemSegID, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0, UsedShmemSegAddr); if (!hdr) { DWORD maperr = GetLastError(); - dumpmem("after MapViewOfFileEx", GetCurrentProcess()); + dumpmem("after failed MapViewOfFileEx"); elog(FATAL, "could not reattach to shared memory (key=%p, addr=%p): error code %lu", UsedShmemSegID, UsedShmemSegAddr, maperr); } + else + dumpmem("after MapViewOfFileEx"); if (hdr != origUsedShmemSegAddr) elog(FATAL, "reattaching to shared memory returned unexpected address (got %p, expected %p)", hdr, origUsedShmemSegAddr); @@ -639,7 +611,5 @@ pgwin32_ReserveSharedMemoryRegion(HANDLE hChild) return false; } - dumpmem("after reserve", hChild); - return true; } diff --git a/src/makefiles/Makefile.win32 b/src/makefiles/Makefile.win32 index 678371d5f2..7abbd01971 100644 --- a/src/makefiles/Makefile.win32 +++ b/src/makefiles/Makefile.win32 @@ -1,7 +1,5 @@ # src/makefiles/Makefile.win32 -override CPPFLAGS+= -DPSAPI_VERSION=1 - ifdef PGXS BE_DLLLIBS= -L$(libdir) -lpostgres override CPPFLAGS+= -I$(includedir_server)/port/win32 diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index ceac0add4e..b2f5fd6185 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -174,10 +174,8 @@ sub mkvcbuild 'repl_gram.y', 'syncrep_scanner.l', 'syncrep_gram.y'); $postgres->AddDefine('BUILDING_DLL'); - $postgres->AddDefine('PSAPI_VERSION=1'); $postgres->AddLibrary('secur32.lib'); $postgres->AddLibrary('ws2_32.lib'); - $postgres->AddLibrary('psapi.lib'); $postgres->AddLibrary('wldap32.lib') if ($solution->{options}->{ldap}); $postgres->FullExportDLL('postgres.lib'); -- 2.40.0