[PATCH v2 5/7] wined3d: Protect wined3d_chunk_vk map fields with a mutex.
Zebediah Figura
zfigura at codeweavers.com
Thu Nov 4 10:16:41 CDT 2021
On 11/4/21 7:07 AM, Henri Verbeet wrote:
> On Thu, 4 Nov 2021 at 06:04, Zebediah Figura <zfigura at codeweavers.com> wrote:
>> void *wined3d_allocator_chunk_vk_map(struct wined3d_allocator_chunk_vk *chunk_vk,
>> struct wined3d_context_vk *context_vk)
>> {
>> struct wined3d_device_vk *device_vk = wined3d_device_vk(context_vk->c.device);
>> const struct wined3d_vk_info *vk_info = context_vk->vk_info;
>> + void *map_ptr;
>> VkResult vr;
>>
>> TRACE("chunk %p, memory 0x%s, map_ptr %p.\n", chunk_vk,
>> wine_dbgstr_longlong(chunk_vk->vk_memory), chunk_vk->c.map_ptr);
>>
>> + wined3d_allocator_chunk_vk_lock(chunk_vk);
>> +
>> if (!chunk_vk->c.map_ptr && (vr = VK_CALL(vkMapMemory(device_vk->vk_device,
>> - chunk_vk->vk_memory, 0, VK_WHOLE_SIZE, 0, &chunk_vk->c.map_ptr))) < 0)
>> + chunk_vk->vk_memory, 0, VK_WHOLE_SIZE, 0, &map_ptr))) < 0)
>> {
>> ERR("Failed to map chunk memory, vr %s.\n", wined3d_debug_vkresult(vr));
>> return NULL;
>> }
>> + chunk_vk->c.map_ptr = map_ptr;
>>
> That doesn't work. If the chunk was already mapped (i.e.,
> "chunk_vk->c.map_ptr" isn't NULL), this will overwrite
> "chunk_vk->c.map_ptr" with the uninitialised "map_ptr".
>
Indeed; I'm surprised that gcc didn't catch that...
More information about the wine-devel
mailing list