diff options
Diffstat (limited to 'go-patches/no-ctrlc-handler.patch')
-rw-r--r-- | go-patches/no-ctrlc-handler.patch | 184 |
1 files changed, 0 insertions, 184 deletions
diff --git a/go-patches/no-ctrlc-handler.patch b/go-patches/no-ctrlc-handler.patch deleted file mode 100644 index 157ed88f..00000000 --- a/go-patches/no-ctrlc-handler.patch +++ /dev/null @@ -1,184 +0,0 @@ -From 8bc7bff3bff8f61312f8d2307cfe2e433d356c31 Mon Sep 17 00:00:00 2001 -From: "Jason A. Donenfeld" <Jason@zx2c4.com> -Date: Fri, 11 Sep 2020 13:04:11 +0200 -Subject: [PATCH 1/2] Revert "[release-branch.go1.15] runtime: detect services - in signal handler" - -This reverts commit b1253d24e159129c778377c3a2a0bde15904a417. ---- - src/runtime/os_windows.go | 73 +++------------------------------------ - 1 file changed, 4 insertions(+), 69 deletions(-) - -diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go -index 769197db46..a584ada702 100644 ---- a/src/runtime/os_windows.go -+++ b/src/runtime/os_windows.go -@@ -36,10 +36,7 @@ const ( - //go:cgo_import_dynamic runtime._SetThreadContext SetThreadContext%2 "kernel32.dll" - //go:cgo_import_dynamic runtime._LoadLibraryW LoadLibraryW%1 "kernel32.dll" - //go:cgo_import_dynamic runtime._LoadLibraryA LoadLibraryA%1 "kernel32.dll" --//go:cgo_import_dynamic runtime._OpenProcess OpenProcess%3 "kernel32.dll" - //go:cgo_import_dynamic runtime._PostQueuedCompletionStatus PostQueuedCompletionStatus%4 "kernel32.dll" --//go:cgo_import_dynamic runtime._ProcessIdToSessionId ProcessIdToSessionId%2 "kernel32.dll" --//go:cgo_import_dynamic runtime._QueryFullProcessImageNameA QueryFullProcessImageNameA%4 "kernel32.dll" - //go:cgo_import_dynamic runtime._ResumeThread ResumeThread%1 "kernel32.dll" - //go:cgo_import_dynamic runtime._SetConsoleCtrlHandler SetConsoleCtrlHandler%2 "kernel32.dll" - //go:cgo_import_dynamic runtime._SetErrorMode SetErrorMode%1 "kernel32.dll" -@@ -87,10 +84,7 @@ var ( - _SetThreadContext, - _LoadLibraryW, - _LoadLibraryA, -- _OpenProcess, - _PostQueuedCompletionStatus, -- _ProcessIdToSessionId, -- _QueryFullProcessImageNameA, - _QueryPerformanceCounter, - _QueryPerformanceFrequency, - _ResumeThread, -@@ -134,8 +128,7 @@ var ( - // Load ntdll.dll manually during startup, otherwise Mingw - // links wrong printf function to cgo executable (see issue - // 12030 for details). -- _NtWaitForSingleObject stdFunction -- _NtQueryInformationProcess stdFunction -+ _NtWaitForSingleObject stdFunction - - // These are from non-kernel32.dll, so we prefer to LoadLibraryEx them. - _timeBeginPeriod, -@@ -262,7 +255,6 @@ func loadOptionalSyscalls() { - throw("ntdll.dll not found") - } - _NtWaitForSingleObject = windowsFindfunc(n32, []byte("NtWaitForSingleObject\000")) -- _NtQueryInformationProcess = windowsFindfunc(n32, []byte("NtQueryInformationProcess\000")) - - if GOARCH == "arm" { - _QueryPerformanceCounter = windowsFindfunc(k32, []byte("QueryPerformanceCounter\000")) -@@ -1003,63 +995,6 @@ func usleep(us uint32) { - onosstack(usleep2Addr, 10*us) - } - --// isWindowsService returns whether the process is currently executing as a --// Windows service. The below technique looks a bit hairy, but it's actually --// exactly what the .NET framework does for the similarly named function: --// https://github.com/dotnet/extensions/blob/f4066026ca06984b07e90e61a6390ac38152ba93/src/Hosting/WindowsServices/src/WindowsServiceHelpers.cs#L26-L31 --// Specifically, it looks up whether the parent process has session ID zero --// and is called "services". --func isWindowsService() bool { -- const ( -- _CURRENT_PROCESS = ^uintptr(0) -- _PROCESS_QUERY_LIMITED_INFORMATION = 0x1000 -- ) -- // pbi is a PROCESS_BASIC_INFORMATION struct, where we just care about -- // the 6th pointer inside of it, which contains the pid of the process -- // parent: -- // https://github.com/wine-mirror/wine/blob/42cb7d2ad1caba08de235e6319b9967296b5d554/include/winternl.h#L1294 -- var pbi [6]uintptr -- var pbiLen uint32 -- err := stdcall5(_NtQueryInformationProcess, _CURRENT_PROCESS, 0, uintptr(unsafe.Pointer(&pbi[0])), uintptr(unsafe.Sizeof(pbi)), uintptr(unsafe.Pointer(&pbiLen))) -- if err != 0 { -- return false -- } -- var psid uint32 -- err = stdcall2(_ProcessIdToSessionId, pbi[5], uintptr(unsafe.Pointer(&psid))) -- if err == 0 || psid != 0 { -- return false -- } -- pproc := stdcall3(_OpenProcess, _PROCESS_QUERY_LIMITED_INFORMATION, 0, pbi[5]) -- if pproc == 0 { -- return false -- } -- defer stdcall1(_CloseHandle, pproc) -- // exeName gets the path to the executable image of the parent process -- var exeName [261]byte -- exeNameLen := uint32(len(exeName) - 1) -- err = stdcall4(_QueryFullProcessImageNameA, pproc, 0, uintptr(unsafe.Pointer(&exeName[0])), uintptr(unsafe.Pointer(&exeNameLen))) -- if err == 0 || exeNameLen == 0 { -- return false -- } -- servicesLower := "services.exe" -- servicesUpper := "SERVICES.EXE" -- i := int(exeNameLen) - 1 -- j := len(servicesLower) - 1 -- if i < j { -- return false -- } -- for { -- if j == -1 { -- return i == -1 || exeName[i] == '\\' -- } -- if exeName[i] != servicesLower[j] && exeName[i] != servicesUpper[j] { -- return false -- } -- i-- -- j-- -- } --} -- - func ctrlhandler1(_type uint32) uint32 { - var s uint32 - -@@ -1075,9 +1010,9 @@ func ctrlhandler1(_type uint32) uint32 { - if sigsend(s) { - return 1 - } -- if !islibrary && !isarchive && !isWindowsService() { -- // Only exit the program if we don't have a DLL or service. -- // See https://golang.org/issues/35965 and https://golang.org/issues/40167 -+ if !islibrary && !isarchive { -+ // Only exit the program if we don't have a DLL. -+ // See https://golang.org/issues/35965. - exit(2) // SIGINT, SIGTERM, etc - } - return 0 --- -2.28.0 - -From 84cc2046962e754af08f99327561be2e979eaf16 Mon Sep 17 00:00:00 2001 -From: "Jason A. Donenfeld" <Jason@zx2c4.com> -Date: Tue, 14 Jul 2020 01:41:03 -0600 -Subject: [PATCH 2/2] runtime: do not explicitly exit on ctrl handler - -The default ctrl+c handler should process exits in situations where it -makes sense, like console apps, but not in situations where it doesn't, -like libraries or services. Therefore, we should remove the exit(2) so -that the default handler is used for this. This also uses the more -proper windows exit code of STATUS_CONTROL_C_EXIT, with the base case -handler installed by KernelBase.dll. In particular, this helps in the -case of services, which previously would terminate when receiving -shutdown signals, instead of passing them onward to the service program. -In this CL, contrary to CL 244959, we do not need to special case -services with expensive detection algorithms, or rely on hard-coded -library/archive flags. - -Fixes #40167. -Fixes #40074. - -Change-Id: I9bf6ed6f65cefeff754d270aa33fa4df8d0b451f -Reviewed-on: https://go-review.googlesource.com/c/go/+/243597 -Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> -TryBot-Result: Gobot Gobot <gobot@golang.org> -Reviewed-by: Alex Brainman <alex.brainman@gmail.com> -Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com> ---- - src/runtime/os_windows.go | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go -index a584ada702..a62e941229 100644 ---- a/src/runtime/os_windows.go -+++ b/src/runtime/os_windows.go -@@ -1010,11 +1010,6 @@ func ctrlhandler1(_type uint32) uint32 { - if sigsend(s) { - return 1 - } -- if !islibrary && !isarchive { -- // Only exit the program if we don't have a DLL. -- // See https://golang.org/issues/35965. -- exit(2) // SIGINT, SIGTERM, etc -- } - return 0 - } - --- -2.28.0 - |