aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/go-patches
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-08-18 09:45:41 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2020-08-18 13:34:48 +0200
commit5dabefe309e7def55d63324b91c9e8decd483b2c (patch)
treef527fbf287a1464e14ea807052b097c9cfff010a /go-patches
parentbuild: re-add patcher (diff)
downloadwireguard-windows-5dabefe309e7def55d63324b91c9e8decd483b2c.tar.xz
wireguard-windows-5dabefe309e7def55d63324b91c9e8decd483b2c.zip
go: remove exit(2) from ctrl+c handler
Simon reported that he'd have hard to diagnose exits at boot time with Go 1.14 but not with 1.13. It turns out that the ctrl+c handler added by 1.14 at some point in the cycle includes some wrong behavior forcing exits on various services signals. In an attempt to address this, this commit backports my patch from 1.16 that removes this errant path. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'go-patches')
-rw-r--r--go-patches/no-ctrlc-handler.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/go-patches/no-ctrlc-handler.patch b/go-patches/no-ctrlc-handler.patch
new file mode 100644
index 00000000..e8c5b6fc
--- /dev/null
+++ b/go-patches/no-ctrlc-handler.patch
@@ -0,0 +1,44 @@
+From c0dded04f7ded5048b44200078a1f723f5e1bcc1 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] 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>
+---
+
+diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go
+index a584ada..a62e941 100644
+--- a/src/runtime/os_windows.go
++++ b/src/runtime/os_windows.go
+@@ -1010,11 +1010,6 @@
+ 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
+ }
+