From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Fri, 14 Jul 2023 17:33:08 -0700 Subject: [PATCH 1/9] Revert "win,process: write minidumps when sending SIGQUIT (#3840)" This reverts commit 748d894e82abcdfff7429cf745003e182c47f163. --- CMakeLists.txt | 5 +- configure.ac | 2 +- include/uv/win.h | 1 - src/win/process.c | 125 ---------------------------------------------- 4 files changed, 2 insertions(+), 131 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 28c6df2566696785383716bf463c37cf2d07f987..36fef0fdff5090bb3a56d7e231c3bfe390772318 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,10 +193,7 @@ if(WIN32) advapi32 iphlpapi userenv - ws2_32 - dbghelp - ole32 - shell32) + ws2_32) list(APPEND uv_sources src/win/async.c src/win/core.c diff --git a/configure.ac b/configure.ac index 98c59363026f8657dccc3aa2ed80d8bee159ebec..c4ee0756551876eac394282f2020cf44be17d023 100644 --- a/configure.ac +++ b/configure.ac @@ -74,7 +74,7 @@ AM_CONDITIONAL([OS400], [AS_CASE([$host_os],[os400], [true], [false]) AM_CONDITIONAL([SUNOS], [AS_CASE([$host_os],[solaris*], [true], [false])]) AM_CONDITIONAL([WINNT], [AS_CASE([$host_os],[mingw*], [true], [false])]) AS_CASE([$host_os],[mingw*], [ - LIBS="$LIBS -lws2_32 -lpsapi -liphlpapi -luserenv -luser32 -ldbghelp -lole32 -lshell32" + LIBS="$LIBS -lws2_32 -lpsapi -liphlpapi -luserenv -luser32 -lshell32" ]) AS_CASE([$host_os], [solaris2.10], [ CFLAGS="$CFLAGS -DSUNOS_NO_IFADDRS" diff --git a/include/uv/win.h b/include/uv/win.h index 12ac53b4f217d212d1b5c32cfe090800f8770a09..d4c271d4d856a5ec847439825cace5bafb0d4acd 100644 --- a/include/uv/win.h +++ b/include/uv/win.h @@ -91,7 +91,6 @@ typedef struct pollfd { * variants (Linux and Darwin) */ #define SIGHUP 1 -#define SIGQUIT 3 #define SIGKILL 9 #define SIGWINCH 28 diff --git a/src/win/process.c b/src/win/process.c index 9d48ddc6f84d6f8c425a8f6f8a344f39d3deb5cc..79bec0090cc94bfe20dab722cf2d8135ddd03cb8 100644 --- a/src/win/process.c +++ b/src/win/process.c @@ -31,9 +31,6 @@ #include "internal.h" #include "handle-inl.h" #include "req-inl.h" -#include -#include -#include /* GetModuleBaseNameW */ #define SIGKILL 9 @@ -1160,129 +1157,7 @@ static int uv__kill(HANDLE process_handle, int signum) { return UV_EINVAL; } - /* Create a dump file for the targeted process, if the registry key - * `HKLM:Software\Microsoft\Windows\Windows Error Reporting\LocalDumps` - * exists. The location of the dumps can be influenced by the `DumpFolder` - * sub-key, which has a default value of `%LOCALAPPDATA%\CrashDumps`, see [0] - * for more detail. Note that if the dump folder does not exist, we attempt - * to create it, to match behavior with WER itself. - * [0]: https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps */ - if (signum == SIGQUIT) { - HKEY registry_key; - DWORD pid, ret; - WCHAR basename[MAX_PATH]; - - /* Get target process name. */ - GetModuleBaseNameW(process_handle, NULL, &basename[0], sizeof(basename)); - - /* Get PID of target process. */ - pid = GetProcessId(process_handle); - - /* Get LocalDumps directory path. */ - ret = RegOpenKeyExW( - HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting\\LocalDumps", - 0, - KEY_QUERY_VALUE, - ®istry_key); - if (ret == ERROR_SUCCESS) { - HANDLE hDumpFile = NULL; - WCHAR dump_folder[MAX_PATH], dump_name[MAX_PATH]; - DWORD dump_folder_len = sizeof(dump_folder), key_type = 0; - ret = RegGetValueW(registry_key, - NULL, - L"DumpFolder", - RRF_RT_ANY, - &key_type, - (PVOID) dump_folder, - &dump_folder_len); - if (ret != ERROR_SUCCESS) { - /* Workaround for missing uuid.dll on MinGW. */ - static const GUID FOLDERID_LocalAppData_libuv = { - 0xf1b32785, 0x6fba, 0x4fcf, - {0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91} - }; - - /* Default value for `dump_folder` is `%LOCALAPPDATA%\CrashDumps`. */ - WCHAR* localappdata; - SHGetKnownFolderPath(&FOLDERID_LocalAppData_libuv, - 0, - NULL, - &localappdata); - _snwprintf_s(dump_folder, - sizeof(dump_folder), - _TRUNCATE, - L"%ls\\CrashDumps", - localappdata); - CoTaskMemFree(localappdata); - } - RegCloseKey(registry_key); - - /* Create dump folder if it doesn't already exist. */ - CreateDirectoryW(dump_folder, NULL); - - /* Construct dump filename from process name and PID. */ - _snwprintf_s(dump_name, - sizeof(dump_name), - _TRUNCATE, - L"%ls\\%ls.%d.dmp", - dump_folder, - basename, - pid); - - hDumpFile = CreateFileW(dump_name, - GENERIC_WRITE, - 0, - NULL, - CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (hDumpFile != INVALID_HANDLE_VALUE) { - DWORD dump_options, sym_options; - FILE_DISPOSITION_INFO DeleteOnClose = { TRUE }; - - /* If something goes wrong while writing it out, delete the file. */ - SetFileInformationByHandle(hDumpFile, - FileDispositionInfo, - &DeleteOnClose, - sizeof(DeleteOnClose)); - - /* Tell wine to dump ELF modules as well. */ - sym_options = SymGetOptions(); - SymSetOptions(sym_options | 0x40000000); - -/* MiniDumpWithAvxXStateContext might be undef in server2012r2 or mingw < 12 */ -#ifndef MiniDumpWithAvxXStateContext -#define MiniDumpWithAvxXStateContext 0x00200000 -#endif - /* We default to a fairly complete dump. In the future, we may want to - * allow clients to customize what kind of dump to create. */ - dump_options = MiniDumpWithFullMemory | - MiniDumpIgnoreInaccessibleMemory | - MiniDumpWithAvxXStateContext; - - if (MiniDumpWriteDump(process_handle, - pid, - hDumpFile, - dump_options, - NULL, - NULL, - NULL)) { - /* Don't delete the file on close if we successfully wrote it out. */ - FILE_DISPOSITION_INFO DontDeleteOnClose = { FALSE }; - SetFileInformationByHandle(hDumpFile, - FileDispositionInfo, - &DontDeleteOnClose, - sizeof(DontDeleteOnClose)); - } - SymSetOptions(sym_options); - CloseHandle(hDumpFile); - } - } - } - switch (signum) { - case SIGQUIT: case SIGTERM: case SIGKILL: case SIGINT: {