From c46d68235e5d99cbea4ff633f19c0312f292e4f9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 21 Feb 2023 16:24:41 -0500 Subject: [PATCH] zink: make zink_vk_query unref consistent the no-check free seems suspicious Part-of: --- src/gallium/drivers/zink/zink_query.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/zink/zink_query.c b/src/gallium/drivers/zink/zink_query.c index e5e0082..f887b57 100644 --- a/src/gallium/drivers/zink/zink_query.c +++ b/src/gallium/drivers/zink/zink_query.c @@ -376,6 +376,16 @@ fail: } static void +unref_vk_query(struct zink_vk_query *vkq) +{ + if (!vkq) + return; + vkq->refcount--; + if (vkq->refcount == 0) + FREE(vkq); +} + +static void destroy_query(struct zink_screen *screen, struct zink_query *query) { assert(zink_screen_usage_check_completion(screen, query->batch_uses)); @@ -385,11 +395,7 @@ destroy_query(struct zink_screen *screen, struct zink_query *query) unsigned num_starts = query->starts.capacity / sizeof(struct zink_query_start); for (unsigned j = 0; j < num_starts; j++) { for (unsigned i = 0; i < PIPE_MAX_VERTEX_STREAMS; i++) { - if (!starts[j].vkq[i]) - continue; - starts[j].vkq[i]->refcount--; - if (starts[j].vkq[i]->refcount == 0) - FREE(starts[j].vkq[i]); + unref_vk_query(starts[j].vkq[i]); } } @@ -454,8 +460,7 @@ query_pool_get_range(struct zink_context *ctx, struct zink_query *q) pool->overflow = true; } } - if (start->vkq[i]) - FREE(start->vkq[i]); + unref_vk_query(start->vkq[i]); start->vkq[i] = vkq; } } -- 2.7.4