mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
200 lines
7.4 KiB
Diff
200 lines
7.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Tyler Veness <calcmogul@gmail.com>
|
|
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 b7981d6194969b74751b97747cfc7bc1d679536b..0ad8026905453e27fff8f720913fdda2544baef2 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 <dbghelp.h>
|
|
-#include <shlobj.h>
|
|
-#include <psapi.h> /* 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: {
|