aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Brainman <alex.brainman@gmail.com>2020-02-16 12:01:02 +1100
committerIan Lance Taylor <iant@golang.org>2020-03-25 20:42:17 +0000
commitd6224d3807534d1d6638e5bbd1d5a1ce23e99ec9 (patch)
tree49fed4d1ee14345e8148b5c21545c5ddcc215b07
parent33554bc6af72f13e5eb319fd5f5aa5c9a150a60c (diff)
downloadgo-d6224d3807534d1d6638e5bbd1d5a1ce23e99ec9.tar.gz
go-d6224d3807534d1d6638e5bbd1d5a1ce23e99ec9.zip
[release-branch.go1.13] runtime: ignore error returned by PowerRegisterSuspendResumeNotification
It appears that PowerRegisterSuspendResumeNotification is not supported when running inside Docker - see issues #35447, #36557 and #37149. Our current code relies on error number to determine Docker environment. But we already saw PowerRegisterSuspendResumeNotification return ERROR_FILE_NOT_FOUND, ERROR_INVALID_PARAMETERS and ERROR_ACCESS_DENIED (see issues above). So this approach is not sustainable. Just ignore PowerRegisterSuspendResumeNotification returned error. For #37149 Fixes #37230 Change-Id: I2beba9d45cdb8c1efac5e974e747827a6261915a Reviewed-on: https://go-review.googlesource.com/c/go/+/219657 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com> (cherry picked from commit d467f3bbc9c76805ae16ab1924c28ec3be487875) Reviewed-on: https://go-review.googlesource.com/c/go/+/224585 Run-TryBot: Ian Lance Taylor <iant@golang.org>
-rw-r--r--src/runtime/os_windows.go23
1 files changed, 2 insertions, 21 deletions
diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go
index 2cf81f61a9..bb631b66a9 100644
--- a/src/runtime/os_windows.go
+++ b/src/runtime/os_windows.go
@@ -263,9 +263,7 @@ func loadOptionalSyscalls() {
func monitorSuspendResume() {
const (
- _DEVICE_NOTIFY_CALLBACK = 2
- _ERROR_FILE_NOT_FOUND = 2
- _ERROR_INVALID_PARAMETERS = 87
+ _DEVICE_NOTIFY_CALLBACK = 2
)
type _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS struct {
callback uintptr
@@ -292,25 +290,8 @@ func monitorSuspendResume() {
callback: compileCallback(*efaceOf(&fn), true),
}
handle := uintptr(0)
- ret := stdcall3(powerRegisterSuspendResumeNotification, _DEVICE_NOTIFY_CALLBACK,
+ stdcall3(powerRegisterSuspendResumeNotification, _DEVICE_NOTIFY_CALLBACK,
uintptr(unsafe.Pointer(&params)), uintptr(unsafe.Pointer(&handle)))
- // This function doesn't use GetLastError(), so we use the return value directly.
- switch ret {
- case 0:
- return // Successful, nothing more to do.
- case _ERROR_FILE_NOT_FOUND:
- // Systems without access to the suspend/resume notifier
- // also have their clock on "program time", and therefore
- // don't want or need this anyway.
- return
- case _ERROR_INVALID_PARAMETERS:
- // This is seen when running in Windows Docker.
- // See issue 36557.
- return
- default:
- println("runtime: PowerRegisterSuspendResumeNotification failed with errno=", ret)
- throw("runtime: PowerRegisterSuspendResumeNotification failure")
- }
}
//go:nosplit