Fixed a leak with console stack in the interpreter.

Issue was pushing a new frame in the global scope. Everytime a global scope was called, 1 ConsoleValue got allocated that was never freed. After 4096 'global scope' function calls, the engine would blow. Also cleans up an extra rogue usage of push/pop with the saver helper.
This commit is contained in:
Jeff Hutchinson 2021-11-20 19:07:48 -05:00
parent 05a8a014b8
commit 7ac62f42a3
2 changed files with 2 additions and 3 deletions

View file

@ -696,7 +696,6 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
{ {
// argc is the local count for eval // argc is the local count for eval
gEvalState.pushFrame(NULL, NULL, argc); gEvalState.pushFrame(NULL, NULL, argc);
gCallStack.pushFrame(0);
popFrame = true; popFrame = true;
} }
else else

View file

@ -1628,9 +1628,9 @@ static ConsoleValue _internalExecute(SimObject *object, S32 argc, ConsoleValue a
ICallMethod *com = dynamic_cast<ICallMethod *>(object); ICallMethod *com = dynamic_cast<ICallMethod *>(object);
if(com) if(com)
{ {
gCallStack.pushFrame(0); ConsoleStackFrameSaver saver;
saver.save();
com->callMethodArgList(argc, argv, false); com->callMethodArgList(argc, argv, false);
gCallStack.popFrame();
} }
} }