From fc466cbc7f992935a3ec7c7d63c0b359c48b9183 Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Thu, 19 Nov 2015 15:43:26 -0700 Subject: loader: Don't use ICD's VkDevice after it has been destroyed LX # 201 Conflicts: loader/trampoline.c --- loader/loader.c | 7 +++---- loader/loader.h | 3 ++- loader/trampoline.c | 4 +++- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'loader') diff --git a/loader/loader.c b/loader/loader.c index cc64e593..45de0e7b 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -1024,11 +1024,10 @@ static struct loader_device *loader_add_logical_device( 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 d184e165..390d0cc4 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -424,7 +424,8 @@ struct loader_instance *loader_get_instance( 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 7c217d1f..64d69f17 100644 --- a/loader/trampoline.c +++ b/loader/trampoline.c @@ -295,7 +295,9 @@ LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, const 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); } -- cgit v1.2.3