diff options
author | sfan5 <sfan5@live.de> | 2017-02-15 17:36:47 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2017-02-15 17:36:47 +0100 |
commit | a5e4273575c7a82459c4f9025ee19ee57eed4698 (patch) | |
tree | bc287b0cdddf9b2c5f8902cef8fbe456a5e441ee /src | |
parent | eb49009d023e6e3b5d59a97b8fb5fed5eee83296 (diff) | |
download | minetest-a5e4273575c7a82459c4f9025ee19ee57eed4698.tar.gz minetest-a5e4273575c7a82459c4f9025ee19ee57eed4698.tar.bz2 minetest-a5e4273575c7a82459c4f9025ee19ee57eed4698.zip |
Fix >5 year old PlayerSAO deletion bug
force_delete=true is usually set at shutdown in order to
also remove PlayerSAOs, however when too many objects
per block are detected force_delete is also set to true.
This was intended only for the current loop iteration but
obviously persisted to the next iterations thereby
deleting all other remaining SAOs.
Diffstat (limited to 'src')
-rw-r--r-- | src/serverenvironment.cpp | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 8d86a4e0a..61faaace7 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -1941,11 +1941,14 @@ void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s) If block wasn't generated (not in memory or on disk), */ -void ServerEnvironment::deactivateFarObjects(bool force_delete) +void ServerEnvironment::deactivateFarObjects(bool _force_delete) { std::vector<u16> objects_to_remove; for(ActiveObjectMap::iterator i = m_active_objects.begin(); i != m_active_objects.end(); ++i) { + // force_delete might be overriden per object + bool force_delete = _force_delete; + ServerActiveObject* obj = i->second; assert(obj); @@ -2147,13 +2150,6 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) continue; } - if (!force_delete && obj->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - warningstream << "ServerEnvironment::deactivateFarObjects(): " - << "Trying to delete player object, THIS SHOULD NEVER HAPPEN!" - << std::endl; - continue; - } - verbosestream<<"ServerEnvironment::deactivateFarObjects(): " <<"object id="<<id<<" is not known by clients" <<"; deleting"<<std::endl; |