From 032b0b6a16de49063f2b1563f097533548800c49 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Thu, 1 Mar 2018 14:12:35 +0000 Subject: fix multiple memory leaks Some minor memory leaks have been fixed (found with valgrind). --- vulkan.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'vulkan.c') diff --git a/vulkan.c b/vulkan.c index 706a842..c20a436 100644 --- a/vulkan.c +++ b/vulkan.c @@ -288,6 +288,8 @@ static VkDevice createdev(VkPhysicalDevice phy, const int *qf) if (res != VK_SUCCESS) eprintf("Could not create device"); + sl_free(&layers); + return dev; } @@ -391,6 +393,12 @@ static void createswp(struct swp *swp, VkSurfaceKHR surf, VkDevice dev, const in vkGetSwapchainImagesKHR(dev, swp->swp, &swp->imgs.count, swp->imgs.list); } +void destroyswp(struct swp *swp, VkDevice dev) +{ + vkDestroySwapchainKHR(dev, swp->swp, NULL); + free(swp->imgs.list); +} + static void createviews(struct views *views, VkDevice dev, const struct swpimgs *imgs, VkFormat fmt) { VkImageViewCreateInfo info; @@ -431,6 +439,7 @@ static void createviews(struct views *views, VkDevice dev, const struct swpimgs static void destroyviews(struct views *views, VkDevice dev) { LIST_FOREACH(views, i) vkDestroyImageView(dev, views->list[i], NULL); + free(views->list); } static VkShaderModule createsmod(VkDevice dev, const void *data, size_t size) @@ -665,6 +674,7 @@ static void createfbs(struct fbs *fbs, VkDevice dev, const struct views *views, static void destroyfbs(struct fbs *fbs, VkDevice dev) { LIST_FOREACH(fbs, i) vkDestroyFramebuffer(dev, fbs->list[i], NULL); + free(fbs->list); } static VkCommandPool createcpool(struct cmdbufs *cmdbufs, VkDevice dev, const int *qf, @@ -833,12 +843,12 @@ int main(void) vkDestroySemaphore(dev, semfin, NULL); vkDestroySemaphore(dev, semavail, NULL); vkDestroyCommandPool(dev, cpool, NULL); + free(cmdbufs.list); destroyfbs(&fbs, dev); destroyppln(&ppln, dev); vkDestroyRenderPass(dev, pass, NULL); destroyviews(&views, dev); - free(views.list); - vkDestroySwapchainKHR(dev, swp.swp, NULL); + destroyswp(&swp, dev); vkDestroySurfaceKHR(inst, surf, NULL); vkDestroyDevice(dev, NULL); freeswpdtl(&sdtl); -- cgit v1.2.3-54-g00ecf