mirror of
https://github.com/golang/go
synced 2024-11-14 06:10:24 -07:00
[release-branch.go1.14] 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 #37699
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 d467f3bbc9
)
Reviewed-on: https://go-review.googlesource.com/c/go/+/224586
Run-TryBot: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
ca153f4db7
commit
74870669fc
@ -294,9 +294,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
|
||||
@ -323,25 +321,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
|
||||
|
Loading…
Reference in New Issue
Block a user