egl/wgl: Make ref_count atomic

Looks like wgl doesn't have much display state to protect.  But it's
ref_count should be atomic before we start removing locking from eglapi
to protect against MakeCurrent being called in parallel on multiple
threads.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Acked-by: Eric Engestrom <eric@igalia.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18050>
This commit is contained in:
Rob Clark 2022-08-11 09:32:29 -07:00
parent f182b1952a
commit a2d6dee4f0

View file

@ -318,7 +318,7 @@ wgl_initialize(_EGLDisplay *disp)
* to free it up correctly.
*/
if (wgl_dpy) {
wgl_dpy->ref_count++;
p_atomic_inc(&wgl_dpy->ref_count);
return EGL_TRUE;
}
@ -338,7 +338,7 @@ wgl_initialize(_EGLDisplay *disp)
return EGL_FALSE;
wgl_dpy = wgl_egl_display(disp);
wgl_dpy->ref_count++;
p_atomic_inc(&wgl_dpy->ref_count);
return EGL_TRUE;
}
@ -357,9 +357,7 @@ wgl_display_release(_EGLDisplay *disp)
wgl_dpy = wgl_egl_display(disp);
assert(wgl_dpy->ref_count > 0);
wgl_dpy->ref_count--;
if (wgl_dpy->ref_count > 0)
if (!p_atomic_dec_zero(&wgl_dpy->ref_count))
return;
_eglCleanupDisplay(disp);
@ -643,7 +641,7 @@ wgl_make_current(_EGLDisplay *disp, _EGLSurface *dsurf,
* EGLDisplay is terminated and then initialized again while a
* context is still bound. See wgl_intitialize() for a more in depth
* explanation. */
wgl_dpy->ref_count++;
p_atomic_inc(&wgl_dpy->ref_count);
}
}