From 0048b058e6434918506a16e65ed27583c8a18de2 Mon Sep 17 00:00:00 2001 From: GAMMACASE Date: Sat, 9 Sep 2023 22:09:29 +0300 Subject: [PATCH] Fix command registration This prevents static initialization problem that was arising where CUtlVector constructor was called after commands were added to it, resulting in an empty list when it gets to the registration step --- tier1/convar.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tier1/convar.cpp b/tier1/convar.cpp index 97f82daa..da72ad53 100644 --- a/tier1/convar.cpp +++ b/tier1/convar.cpp @@ -57,7 +57,7 @@ public: } else { - s_ConCommandRegList.AddToTail(pCmd); + GetCommandRegList()->AddToTail(pCmd); } } @@ -67,9 +67,9 @@ public: { s_bConCommandsRegistered = true; - FOR_EACH_VEC( s_ConCommandRegList, i) + for(int i = 0; i < GetCommandRegList()->Count(); i++) { - ConCommand *pCmd = s_ConCommandRegList[i]; + ConCommand *pCmd = GetCommandRegList()->Element(i); ConCommandHandle hndl = g_pCVar->RegisterConCommand(pCmd, s_nCVarFlag); pCmd->SetHandle(hndl); @@ -82,13 +82,18 @@ public: } } private: - static CUtlVector s_ConCommandRegList; + + // GAMMACASE: Required to prevent static initialization order problem https://isocpp.org/wiki/faq/ctors#static-init-order + static CUtlVector *GetCommandRegList() + { + static CUtlVector s_ConCommandRegList; + return &s_ConCommandRegList; + } static bool s_bConCommandsRegistered; }; bool ConCommandRegList::s_bConCommandsRegistered = false; -CUtlVector ConCommandRegList::s_ConCommandRegList; #ifdef CONVAR_WORK_FINISHED template