diff options
author | Alex Brainman <alex.brainman@gmail.com> | 2020-02-16 12:01:02 +1100 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-03-25 20:42:17 +0000 |
commit | d6224d3807534d1d6638e5bbd1d5a1ce23e99ec9 (patch) | |
tree | 49fed4d1ee14345e8148b5c21545c5ddcc215b07 | |
parent | 33554bc6af72f13e5eb319fd5f5aa5c9a150a60c (diff) | |
download | go-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.go | 23 |
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(¶ms)), 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 |