Commit 3e89272f authored by Jordan Rhee's avatar Jordan Rhee Committed by Alex Brainman

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: 's avatarAlex Brainman <alex.brainman@gmail.com>
parent 58a17b43
......@@ -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)))()
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.
func nestedCall(t *testing.T, f func()) {
c := syscall.NewCallback(callback)
d := GetDLL(t, "user32.dll")
d := GetDLL(t, "kernel32.dll")
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) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment