Alfred Agrell (@Alcaro) commented about dlls/win32u/opengl.c:
if (context) { + char *renderer, *vendor; + funcs->p_eglMakeCurrent( egl->display, EGL_NO_SURFACE, EGL_NO_SURFACE, context );
- egl->device_name = gpu_device_name( egl->vendor_id, egl->device_id, (const char *)funcs->p_glGetString( GL_RENDERER ) ); - egl->vendor_name = opengl_vendor_to_name( egl->vendor_id, (const char *)funcs->p_glGetString( GL_VENDOR ) ); + renderer = strdup( (const char *)funcs->p_glGetString( GL_RENDERER ) ); + egl->device_name = gpu_device_name( egl->vendor_id, egl->device_id, renderer ); + if (egl->device_name != renderer) free( renderer ); + + vendor = strdup( (const char *)funcs->p_glGetString( GL_VENDOR ) ); + egl->vendor_name = opengl_vendor_to_name( egl->vendor_id, vendor ); + if (egl->device_name != renderer) free( vendor );
Is this supposed to compare to renderer? Shouldn't it be vendor? Feels like a memory leak even with that fixed, but if the function is named init, that's probably once per process and not worth worrying about. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9491#note_122510