From 75f1d2e2596035f603558dced17e64238032ce2c Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 2 Feb 2016 01:21:28 +0100 Subject: SWORD25: Use more appropriate function for growing the stack The call to lua_growstack in unpersistThread would unconditionally at least double the size of the stack. This caused memory usage to grow exponentially (literally) with the number of serialized threads. Bugs #6977, #6999. --- engines/sword25/util/lua_unpersist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines') diff --git a/engines/sword25/util/lua_unpersist.cpp b/engines/sword25/util/lua_unpersist.cpp index ef0ef31041..678ddb52db 100644 --- a/engines/sword25/util/lua_unpersist.cpp +++ b/engines/sword25/util/lua_unpersist.cpp @@ -425,7 +425,7 @@ void unpersistThread(UnSerializationInfo *info, int index) { // First, deserialize the object stack uint32 stackSize = info->readStream->readUint32LE(); - lua_growstack(info->luaState, (int)stackSize); + lua_checkstack(info->luaState, (int)stackSize); // Make sure that the first stack element (a nil, representing // the imaginary top-level C function) is written to the very, -- cgit v1.2.3 From ad688f9d6f11e576356fb612e9da9ee66d2e1e6b Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 2 Feb 2016 02:16:41 +0100 Subject: SWORD25: Remove now unused function --- engines/sword25/util/lua_persistence_util.cpp | 9 --------- engines/sword25/util/lua_persistence_util.h | 1 - 2 files changed, 10 deletions(-) (limited to 'engines') diff --git a/engines/sword25/util/lua_persistence_util.cpp b/engines/sword25/util/lua_persistence_util.cpp index 958fb7ac3c..d0192c2e66 100644 --- a/engines/sword25/util/lua_persistence_util.cpp +++ b/engines/sword25/util/lua_persistence_util.cpp @@ -280,15 +280,6 @@ void lua_reallocstack(lua_State *L, int newsize) { correctStack(L, oldstack); } -void lua_growstack(lua_State *L, int n) { - // Double size is enough? - if (n <= L->stacksize) { - lua_reallocstack(L, 2 * L->stacksize); - } else { - lua_reallocstack(L, L->stacksize + n); - } -} - void lua_reallocCallInfo(lua_State *lauState, int newsize) { CallInfo *oldci = lauState->base_ci; lua_reallocvector(lauState, lauState->base_ci, lauState->size_ci, newsize, CallInfo); diff --git a/engines/sword25/util/lua_persistence_util.h b/engines/sword25/util/lua_persistence_util.h index 4d0085e242..e3a2935f2c 100644 --- a/engines/sword25/util/lua_persistence_util.h +++ b/engines/sword25/util/lua_persistence_util.h @@ -90,7 +90,6 @@ void unboxUpValue(lua_State *luaState); size_t appendStackToStack_reverse(lua_State *from, lua_State *to); void correctStack(lua_State *L, TValue *oldstack); void lua_reallocstack(lua_State *L, int newsize); -void lua_growstack(lua_State *L, int n); void lua_reallocCallInfo(lua_State *lauState, int newsize); -- cgit v1.2.3