diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-11-19 15:43:26 -0700 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2015-11-20 10:00:59 -0700 |
| commit | fc466cbc7f992935a3ec7c7d63c0b359c48b9183 (patch) | |
| tree | 3cb922d53716eb3dec1f0a06cdc2dbcfddcc66ef /loader | |
| parent | 05b4ed0d447b78d6638015577818518d1d9681c4 (diff) | |
| download | usermoji-fc466cbc7f992935a3ec7c7d63c0b359c48b9183.tar.xz | |
loader: Don't use ICD's VkDevice after it has been destroyed
LX # 201
Conflicts:
loader/trampoline.c
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/loader.c | 7 | ||||
| -rw-r--r-- | loader/loader.h | 3 | ||||
| -rw-r--r-- | loader/trampoline.c | 4 |
3 files changed, 8 insertions, 6 deletions
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); } |
