From c2e0c2c67f0609b4542bed696d5c22cd47fe2790 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 18 Mar 2024 09:28:13 -0400 Subject: [PATCH] zink: don't use set_foreach_remove with dmabuf_exports foreach_remove cannot be used if the set ever has members deleted, and this set may have deleted members Fixes: 7b7a581a52d ("zink: prune dmabuf export tracking when adding resource binds") Part-of: --- src/gallium/drivers/zink/zink_batch.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 01611452fab..b3f72018720 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -758,7 +758,7 @@ submit_queue(void *data, void *gdata, int thread_index) unsigned i = 0; VkSemaphore *sem = bs->signal_semaphores.data; - set_foreach_remove(&bs->dmabuf_exports, entry) { + set_foreach(&bs->dmabuf_exports, entry) { struct zink_resource *res = (void*)entry->key; for (; res; res = zink_resource(res->base.b.next)) zink_screen_import_dmabuf_semaphore(screen, res, sem[i++]); @@ -766,6 +766,7 @@ submit_queue(void *data, void *gdata, int thread_index) struct pipe_resource *pres = (void*)entry->key; pipe_resource_reference(&pres, NULL); } + _mesa_set_clear(&bs->dmabuf_exports, NULL); bs->usage.submit_count++; end: