From 2508eb3f89f27a3519ea552a8290fd0602be8054 Mon Sep 17 00:00:00 2001 From: Mike Stroyan Date: Fri, 31 Jul 2015 16:20:39 -0600 Subject: layers: Fix freed memory use in layer_destroy_msg_callback Defer free in layer_destroy_msg_callback until after last use of data. --- layers/vk_layer_logging.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/layers/vk_layer_logging.h b/layers/vk_layer_logging.h index b81a5e5f..bb3087dd 100644 --- a/layers/vk_layer_logging.h +++ b/layers/vk_layer_logging.h @@ -176,25 +176,31 @@ static inline void layer_destroy_msg_callback( { VkLayerDbgFunctionNode *pTrav = debug_data->g_pDbgFunctionHead; VkLayerDbgFunctionNode *pPrev = pTrav; + bool matched; debug_data->active_flags = 0; while (pTrav) { if (pTrav->msgCallback == msg_callback) { + matched = true; pPrev->pNext = pTrav->pNext; if (debug_data->g_pDbgFunctionHead == pTrav) { debug_data->g_pDbgFunctionHead = pTrav->pNext; } - free(pTrav); debug_report_log_msg( debug_data, VK_DBG_REPORT_DEBUG_BIT, VK_OBJECT_TYPE_MSG_CALLBACK, pTrav->msgCallback.handle, 0, DEBUG_REPORT_NONE, "DebugReport", "Destroyed callback"); + } else { + matched = false; } debug_data->active_flags |= pTrav->msgFlags; pPrev = pTrav; pTrav = pTrav->pNext; + if (matched) { + free(pPrev); + } } } -- cgit v1.2.3