mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-06-30 23:25:39 +00:00
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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user