diff options
author | Mattes D <github@xoft.cz> | 2017-01-15 16:10:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-15 16:10:06 +0100 |
commit | fa69d09a497c24443dd5df3cba2ca08811f8649a (patch) | |
tree | 637f9430a4e49d6ac2e3612cb1c8b8cbeb2d3f9d /src | |
parent | Moved cPrefab parser self-check to the LoadablePieces test. (#3536) (diff) | |
parent | Tests: Added LuaState thread stress-test. (diff) | |
download | cuberite-fa69d09a497c24443dd5df3cba2ca08811f8649a.tar cuberite-fa69d09a497c24443dd5df3cba2ca08811f8649a.tar.gz cuberite-fa69d09a497c24443dd5df3cba2ca08811f8649a.tar.bz2 cuberite-fa69d09a497c24443dd5df3cba2ca08811f8649a.tar.lz cuberite-fa69d09a497c24443dd5df3cba2ca08811f8649a.tar.xz cuberite-fa69d09a497c24443dd5df3cba2ca08811f8649a.tar.zst cuberite-fa69d09a497c24443dd5df3cba2ca08811f8649a.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Bindings/LuaState.cpp | 12 | ||||
-rw-r--r-- | src/Bindings/LuaState.h | 3 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index b768b21a3..2acf7df84 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -2288,15 +2288,17 @@ void cLuaState::UntrackRef(cTrackedRef & a_Ref) return; } - // Remove the callback: + // Remove the callback (note that another thread may have cleared the callbacks by closing the LuaState): cCSLock Lock(canonState->m_CSTrackedRefs); auto & trackedRefs = canonState->m_TrackedRefs; - trackedRefs.erase(std::remove_if(trackedRefs.begin(), trackedRefs.end(), - [&a_Ref](cTrackedRef * a_StoredRef) + for (auto itr = trackedRefs.begin(), end = trackedRefs.end(); itr != end; ++itr) + { + if (*itr == &a_Ref) { - return (a_StoredRef == &a_Ref); + trackedRefs.erase(itr); + break; } - )); + } } diff --git a/src/Bindings/LuaState.h b/src/Bindings/LuaState.h index 80f5c3cc6..558e8d79a 100644 --- a/src/Bindings/LuaState.h +++ b/src/Bindings/LuaState.h @@ -522,7 +522,8 @@ public: /** Allows this object to be used in the same way as a lua_State *, for example in the LuaLib functions */ operator lua_State * (void) { return m_LuaState; } - /** Creates the m_LuaState, if not closed already. This state will be automatically closed in the destructor. + /** Creates the m_LuaState, if not created already. + This state will be automatically closed in the destructor. The regular Lua libs are registered, but the MCS API is not registered (so that Lua can be used as lite-config as well), use RegisterAPILibs() to do that. */ void Create(void); |