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);
 }