Skip to content

Commit

Permalink
Make test_layer delete destroyed devices
Browse files Browse the repository at this point in the history
Destroyed devices need to be removed from the test_layer's created_devices
vector, so that it doesn't accidentally mistake dead devices for alive ones
when checking for whether a device extension is supported or not.

This caused multiple days of debugging headache as it caused sporadic test
failures due to the re-use of VkDevice handle values (which is caused by
the memory manager reusing allocations). Since a second VkDevice could share
the handle value of the first, and the first wasn't removed from the vector,
test_layer would use the data assocated with the first device by mistake.
  • Loading branch information
charles-lunarg committed Sep 8, 2023
1 parent 64055f0 commit 6e168be
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions tests/framework/layer/test_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -654,11 +654,11 @@ VKAPI_ATTR void VKAPI_CALL test_vkDestroyDevice(VkDevice device, const VkAllocat
layer.second_device_created_during_create_device.dispatch_table.DestroyDevice);
}

for (auto& created_device : layer.created_devices) {
if (created_device.device_handle == device) {
created_device.dispatch_table.DestroyDevice(device, pAllocator);
break;
}
auto it = std::find_if(std::begin(layer.created_devices), std::end(layer.created_devices),
[device](const TestLayer::Device& dev) { return device == dev.device_handle; });
if (it != std::end(layer.created_devices)) {
it->dispatch_table.DestroyDevice(device, pAllocator);
layer.created_devices.erase(it);
}
}

Expand Down

0 comments on commit 6e168be

Please sign in to comment.