Mesa was incrementing and decrementing EGL refcounts with ++ and --. --- src/egl/main/egldisplay.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c index bbc3063..78b5d20 100644 --- a/src/egl/main/egldisplay.c +++ b/src/egl/main/egldisplay.c @@ -37,6 +37,8 @@ #include <string.h> #include "c11/threads.h" +#include "util/u_atomic.h" + #include "eglcontext.h" #include "eglcurrent.h" #include "eglsurface.h" @@ -385,21 +387,20 @@ _eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy) void _eglGetResource(_EGLResource *res) { - assert(res && res->RefCount > 0); - /* hopefully a resource is always manipulated with its display locked */ - res->RefCount++; + assert(res->RefCount > 0); + p_atomic_inc(&res->RefCount); } /** * Decrement reference count for the resource. + * Return true when the last reference is dropped. */ EGLBoolean _eglPutResource(_EGLResource *res) { - assert(res && res->RefCount > 0); - res->RefCount--; - return (!res->RefCount); + assert(res->RefCount > 0); + return p_atomic_dec_return(&res->RefCount) == 0; } -- 2.9.0.rc2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev