]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use EnumTimeFormatsEx instead of EnumWindows in callback tests
authorJordan Rhee <jordanrh@microsoft.com>
Sun, 30 Dec 2018 00:19:16 +0000 (16:19 -0800)
committerAlex Brainman <alex.brainman@gmail.com>
Sun, 30 Dec 2018 04:55:26 +0000 (04:55 +0000)
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>
src/runtime/syscall_windows_test.go

index 0882e9cb73b6d28e570976d09f3bd30ccefd9992..3ad651297677481ca15b296ac48c7ce24e5e94f3 100644 (file)
@@ -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) {