diff options
author | sfan5 <sfan5@live.de> | 2017-09-15 12:19:01 +0200 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-09-15 12:19:01 +0200 |
commit | 04839f233f37faa9af406ea66fc6c199127781eb (patch) | |
tree | d243fcae7f57fe4cf22046f42cda5424a1561e4c /src/script | |
parent | edbc533414b0ba991a82f8003d90924e1dc60d95 (diff) | |
download | minetest-04839f233f37faa9af406ea66fc6c199127781eb.tar.gz minetest-04839f233f37faa9af406ea66fc6c199127781eb.tar.bz2 minetest-04839f233f37faa9af406ea66fc6c199127781eb.zip |
ServerEnv: Clean up object lifecycle handling (#6414)
* ServerEnv: Clean up object lifecycle handling
Diffstat (limited to 'src/script')
-rw-r--r-- | src/script/cpp_api/s_base.cpp | 4 | ||||
-rw-r--r-- | src/script/lua_api/l_env.cpp | 2 | ||||
-rw-r--r-- | src/script/lua_api/l_object.cpp | 9 |
3 files changed, 9 insertions, 6 deletions
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 32a99826e..c0d9a4f10 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -343,6 +343,10 @@ void ScriptApiBase::objectrefGetOrCreate(lua_State *L, ObjectRef::create(L, cobj); } else { push_objectRef(L, cobj->getId()); + if (cobj->isGone()) + warningstream << "ScriptApiBase::objectrefGetOrCreate(): " + << "Pushing ObjectRef to removed/deactivated object" + << ", this is probably a bug." << std::endl; } } diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 1d0716484..f9498a9a7 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -642,7 +642,7 @@ int ModApiEnvMod::l_get_objects_inside_radius(lua_State *L) std::vector<u16>::const_iterator iter = ids.begin(); for(u32 i = 0; iter != ids.end(); ++iter) { ServerActiveObject *obj = env->getActiveObject(*iter); - if (!obj->m_removed) { + if (!obj->isGone()) { // Insert object reference into table script->objectrefGetOrCreate(L, obj); lua_rawseti(L, -2, ++i); diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 9b312b3ee..4e4901db5 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -140,15 +140,14 @@ int ObjectRef::l_remove(lua_State *L) return 0; const std::unordered_set<int> &child_ids = co->getAttachmentChildIds(); - std::unordered_set<int>::const_iterator it; - for (it = child_ids.begin(); it != child_ids.end(); ++it) { + for (int child_id : child_ids) { // Child can be NULL if it was deleted earlier - if (ServerActiveObject *child = env->getActiveObject(*it)) + if (ServerActiveObject *child = env->getActiveObject(child_id)) child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0)); } - verbosestream<<"ObjectRef::l_remove(): id="<<co->getId()<<std::endl; - co->m_removed = true; + verbosestream << "ObjectRef::l_remove(): id=" << co->getId() << std::endl; + co->m_pending_removal = true; return 0; } |