From 8633ce06af4a489fa0fd0b4478fe3325a12a3bb3 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 13 Oct 2021 09:56:06 -0400 Subject: [PATCH] zink: stop leaking descriptor pool references this never really mattered before, but now these need to actually get freed Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_descriptors.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index e814d1c..8c6a454 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -598,8 +598,11 @@ descriptor_pool_get(struct zink_context *ctx, enum zink_descriptor_type type, hash = hash_descriptor_pool(&key); struct hash_entry *he = _mesa_hash_table_search_pre_hashed(ctx->dd->descriptor_pools[type], hash, &key); - if (he) - return (void*)he->data; + if (he) { + struct zink_descriptor_pool *pool = he->data; + pipe_reference(NULL, &pool->reference); + return pool; + } } struct zink_descriptor_pool *pool = descriptor_pool_create(zink_screen(ctx->base.screen), type, layout_key, sizes, num_type_sizes); if (type != ZINK_DESCRIPTOR_TYPES) @@ -1086,7 +1089,7 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg) struct zink_descriptor_pool *pool = descriptor_pool_get(ctx, i, pg->dd->layout_key[i], size, num_sizes); if (!pool) return false; - zink_descriptor_pool_reference(ctx, &pdd_cached(pg)->pool[i], pool); + pdd_cached(pg)->pool[i] = pool; if (screen->info.have_KHR_descriptor_update_template && screen->descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES) -- 2.7.4