loader: Don't use ICD's VkDevice after it has been destroyed
LX # 201
Conflicts:
loader/trampoline.c
diff --git a/loader/loader.c b/loader/loader.c
index cc64e59..45de0e7 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -1024,11 +1024,10 @@
void loader_remove_logical_device(
const struct loader_instance *inst,
- VkDevice device)
+ struct loader_icd *icd,
+ struct loader_device *found_dev)
{
- struct loader_device *found_dev, *dev, *prev_dev;
- struct loader_icd *icd;
- icd = loader_get_icd_and_device(device, &found_dev);
+ struct loader_device *dev, *prev_dev;
if (!icd || !found_dev)
return;
diff --git a/loader/loader.h b/loader/loader.h
index d184e16..390d0cc 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -424,7 +424,8 @@
const VkInstance instance);
void loader_remove_logical_device(
const struct loader_instance *inst,
- VkDevice device);
+ struct loader_icd *icd,
+ struct loader_device *found_dev);
VkResult loader_enable_instance_layers(
struct loader_instance *inst,
const VkInstanceCreateInfo *pCreateInfo,
diff --git a/loader/trampoline.c b/loader/trampoline.c
index 7c217d1..64d69f1 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -295,7 +295,9 @@
loader_platform_thread_lock_mutex(&loader_lock);
disp->DestroyDevice(device, pAllocator);
- loader_remove_logical_device(inst, device);
+ dev->device = NULL;
+ loader_remove_logical_device(inst, icd, dev);
+
loader_platform_thread_unlock_mutex(&loader_lock);
}