diff --git a/src/gallium/frontends/dri/dri_context.c b/src/gallium/frontends/dri/dri_context.c index 48919c1f5d8..5c6b0617303 100644 --- a/src/gallium/frontends/dri/dri_context.c +++ b/src/gallium/frontends/dri/dri_context.c @@ -279,21 +279,11 @@ dri_unbind_context(struct dri_context *ctx) if (ctx->draw || ctx->read) { assert(ctx->draw); - if (ctx->draw->refcount == 0) { - /* ERROR!!! */ - return GL_FALSE; - } dri_put_drawable(ctx->draw); - if (ctx->read != ctx->draw) { - if (ctx->read->refcount == 0) { - /* ERROR!!! */ - return GL_FALSE; - } - + if (ctx->read != ctx->draw) dri_put_drawable(ctx->read); - } ctx->draw = NULL; ctx->read = NULL; diff --git a/src/gallium/frontends/dri/dri_drawable.c b/src/gallium/frontends/dri/dri_drawable.c index dc54b7fb6bd..150603d6d08 100644 --- a/src/gallium/frontends/dri/dri_drawable.c +++ b/src/gallium/frontends/dri/dri_drawable.c @@ -207,13 +207,13 @@ dri_destroy_drawable(struct dri_drawable *drawable) void dri_put_drawable(struct dri_drawable *drawable) { - if (drawable) { - drawable->refcount--; - if (drawable->refcount) - return; + if (drawable) { + int refcount = --drawable->refcount; + assert(refcount >= 0); - dri_destroy_drawable(drawable); - } + if (!refcount) + dri_destroy_drawable(drawable); + } } /**