1
0
mirror of https://github.com/golang/go synced 2024-11-24 04:00:13 -07:00

runtime: make sure to properly park before going to sleep in Windows ConsoleControlHandler

This change avoids the program intermittently hanging on windows/arm64 after getting
a signal for which the ConsoleControlHandler can not return.

Fixes #49458

Change-Id: Ie28f0f437c7e0f9634b6b3e29dc6cdebd5d996f6
Reviewed-on: https://go-review.googlesource.com/c/go/+/364556
Trust: Patrik Nyblom <pnyb@google.com>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Patrik Nyblom <pnyb@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
Patrik Nyblom 2021-11-16 14:35:59 -08:00
parent 4083a6f377
commit 54b9cb8037

View File

@ -1194,8 +1194,10 @@ func ctrlHandler(_type uint32) uintptr {
if sigsend(s) {
if s == _SIGTERM {
// Windows terminates the process after this handler returns.
// Block indefinitely to give signal handlers a chance to clean up.
stdcall1(_Sleep, uintptr(_INFINITE))
// Block indefinitely to give signal handlers a chance to clean up,
// but make sure to be properly parked first, so the rest of the
// program can continue executing.
block()
}
return 1
}