mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
runtime: use EnumTimeFormatsEx instead of EnumWindows in callback tests
Use EnumTimeFormatsEx() to test panics across callback boundaries instead of EnumWindows(). EnumWindows() is incompatible with Go's panic unwinding mechanism. See the associated issue for more information. Updates #26148 Change-Id: If1dd70885d9c418b980b6827942cb1fd16c73803 Reviewed-on: https://go-review.googlesource.com/c/155923 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
parent
58a17b43d1
commit
3e89272f9c
|
@ -157,7 +157,7 @@ func TestEnumWindows(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func callback(hwnd syscall.Handle, lparam uintptr) uintptr {
|
func callback(timeFormatString unsafe.Pointer, lparam uintptr) uintptr {
|
||||||
(*(*func())(unsafe.Pointer(&lparam)))()
|
(*(*func())(unsafe.Pointer(&lparam)))()
|
||||||
return 0 // stop enumeration
|
return 0 // stop enumeration
|
||||||
}
|
}
|
||||||
|
@ -165,9 +165,10 @@ func callback(hwnd syscall.Handle, lparam uintptr) uintptr {
|
||||||
// nestedCall calls into Windows, back into Go, and finally to f.
|
// nestedCall calls into Windows, back into Go, and finally to f.
|
||||||
func nestedCall(t *testing.T, f func()) {
|
func nestedCall(t *testing.T, f func()) {
|
||||||
c := syscall.NewCallback(callback)
|
c := syscall.NewCallback(callback)
|
||||||
d := GetDLL(t, "user32.dll")
|
d := GetDLL(t, "kernel32.dll")
|
||||||
defer d.Release()
|
defer d.Release()
|
||||||
d.Proc("EnumWindows").Call(c, uintptr(*(*unsafe.Pointer)(unsafe.Pointer(&f))))
|
const LOCALE_NAME_USER_DEFAULT = 0
|
||||||
|
d.Proc("EnumTimeFormatsEx").Call(c, LOCALE_NAME_USER_DEFAULT, 0, uintptr(*(*unsafe.Pointer)(unsafe.Pointer(&f))))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCallback(t *testing.T) {
|
func TestCallback(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue