internal/egl: fix loadEGL caching error on Windows

loadEGL used sync.Once incorrectly: the error returned by
loadDLLs was assigned to a local variable inside loadEGL,
so on the second call Do would not run and the
function would return nil even though the DLLs were never
loaded. This caused a nil pointer dereference when callers
proceeded to use _eglGetDisplay and other uninitialized
function pointers.

Fix by replacing the sync.Once with sync.OnceValue, which
correctly caches the return value of loadDLLs across all
calls.

Signed-off-by: Kevin Yuan <farproc@gmail.com>
This commit is contained in:
Kevin Yuan
2026-05-26 13:49:04 +08:00
committed by Elias Naur
parent dec57aea1c
commit d52632b475
+2 -6
View File
@@ -41,14 +41,10 @@ var (
_eglWaitClient *syscall.Proc
)
var loadOnce sync.Once
var loadOnce = sync.OnceValue(loadDLLs)
func loadEGL() error {
var err error
loadOnce.Do(func() {
err = loadDLLs()
})
return err
return loadOnce()
}
func loadDLLs() error {