diff options
| author | Cort Stratton <cort@google.com> | 2017-11-28 12:11:05 -0800 |
|---|---|---|
| committer | Lenny Komow <lenny@lunarg.com> | 2017-11-28 16:05:59 -0700 |
| commit | 103714e21993d1a5108720cb83cfd0863b258199 (patch) | |
| tree | 0ff9988c91cb10a0ad36a7df41eda8764420413a /loader | |
| parent | ee0e0b009757ee199e300fc20080626e264d7b4a (diff) | |
| download | usermoji-103714e21993d1a5108720cb83cfd0863b258199.tar.xz | |
loader: fix memory leak for layers with >1 dev_exts
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/loader.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/loader/loader.c b/loader/loader.c index ca6d5719..dd5e21ff 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -901,8 +901,9 @@ static struct loader_layer_properties *loader_get_next_layer_property(const stru // Remove all layer properties entries from the list void loader_delete_layer_properties(const struct loader_instance *inst, struct loader_layer_list *layer_list) { - uint32_t i, j; + uint32_t i, j, k; struct loader_device_extension_list *dev_ext_list; + struct loader_dev_ext_props *ext_props; if (!layer_list) return; for (i = 0; i < layer_list->count; i++) { @@ -912,11 +913,16 @@ void loader_delete_layer_properties(const struct loader_instance *inst, struct l } loader_destroy_generic_list(inst, (struct loader_generic_list *)&layer_list->list[i].instance_extension_list); dev_ext_list = &layer_list->list[i].device_extension_list; - if (dev_ext_list->capacity > 0 && NULL != dev_ext_list->list && dev_ext_list->list->entrypoint_count > 0) { - for (j = 0; j < dev_ext_list->list->entrypoint_count; j++) { - loader_instance_heap_free(inst, dev_ext_list->list->entrypoints[j]); + if (dev_ext_list->capacity > 0 && NULL != dev_ext_list->list) { + for (j = 0; j < dev_ext_list->count; j++) { + ext_props = &dev_ext_list->list[j]; + if (ext_props->entrypoint_count > 0) { + for (k = 0; k < ext_props->entrypoint_count; k++) { + loader_instance_heap_free(inst, ext_props->entrypoints[k]); + } + loader_instance_heap_free(inst, ext_props->entrypoints); + } } - loader_instance_heap_free(inst, dev_ext_list->list->entrypoints); } loader_destroy_generic_list(inst, (struct loader_generic_list *)dev_ext_list); } |
