From 3e8ecfedd41f6b77de296a9cb71a9872edcfa79d Mon Sep 17 00:00:00 2001 From: Aitor Camacho Date: Tue, 25 Nov 2025 03:35:06 +0900 Subject: [PATCH] vulkan/cmd_queue: Use vk_strdup and free allocated string memory Fixes: 9082715ab01 ("vk/cmd_queue: generate copies for string struct members") Reviewed-by: Karmjit Mahil Reviewed-by: Konstantin Seurer Signed-off-by: Aitor Camacho (cherry picked from commit 16c98f4f180203ba73ce4c1eab20eb666f3b3d2b) Part-of: --- .pick_status.json | 2 +- src/vulkan/util/vk_cmd_queue_gen.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index a8f30ce9d8e..f553606f032 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -284,7 +284,7 @@ "description": "vulkan/cmd_queue: Use vk_strdup and free allocated string memory", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "9082715ab014270fb8bdf555526d7e55a4890538", "notes": null diff --git a/src/vulkan/util/vk_cmd_queue_gen.py b/src/vulkan/util/vk_cmd_queue_gen.py index 194655f8c4d..8471356fc69 100644 --- a/src/vulkan/util/vk_cmd_queue_gen.py +++ b/src/vulkan/util/vk_cmd_queue_gen.py @@ -578,7 +578,7 @@ def get_struct_copy(builder, dst, src_name, src_type, types, parent_name=None, l tmp_src_name, member.name ), member.type, types, tmp_src_name, member.len) elif member.len and member.len == 'null-terminated': - builder.add("%s->%s = strdup(%s->%s);" % (tmp_dst_name, member.name, tmp_src_name, member.name)) + builder.add("%s->%s = vk_strdup(queue->alloc, %s->%s, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);" % (tmp_dst_name, member.name, tmp_src_name, member.name)) elif member.name == 'pNext': get_pnext_member_copy(builder, tmp_dst_name, src_type, member, types) @@ -627,6 +627,8 @@ def get_struct_free(builder, field_name, nullable, struct_type, types): builder.add("}") builder.add("vk_free(queue->alloc, %s);" % (local_member_name)) + elif member.len and member.len == 'null-terminated': + builder.add("vk_free(queue->alloc, (void*)%s);" % (member_name)) elif member.name == 'pNext': get_pnext_member_free(builder, struct_type, types, member_name)