summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Müller <robert.mueller@uni-siegen.de>2021-08-16 21:56:46 +0200
committerRobert Müller <robert.mueller@uni-siegen.de>2021-11-30 22:43:58 +0100
commit579b85f74248ca5e2447806e4fbdca0069143e0a (patch)
treedb5be4b119ac26f9a07cdea45c26a9863e60b43a
parent8561b4c859f9bd268384b79004641a920f7cbd42 (diff)
fix only first command chain data being freed
-rw-r--r--src/engine/shared/console.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp
index 5d456120e..369087d6d 100644
--- a/src/engine/shared/console.cpp
+++ b/src/engine/shared/console.cpp
@@ -833,8 +833,16 @@ CConsole::~CConsole()
{
CCommand *pNext = pCommand->m_pNext;
- if(pCommand->m_pfnCallback == Con_Chain)
- mem_free(static_cast<CChain *>(pCommand->m_pUserData));
+ FCommandCallback pfnCallback = pCommand->m_pfnCallback;
+ void *pUserData = pCommand->m_pUserData;
+ while(pfnCallback == Con_Chain)
+ {
+ CChain *pChainInfo = static_cast<CChain *>(pUserData);
+ pfnCallback = pChainInfo->m_pfnCallback;
+ pUserData = pChainInfo->m_pCallbackUserData;
+ mem_free(pChainInfo);
+ }
+
mem_free(pCommand);
pCommand = pNext;