forked from Mirrorlandia_minetest/minetest
Handle multiple deserialization of a block's entities
This fix consists of two parts: - Clear the list of stored entities. This has no side-effects. - Catch the case where active entities exist and print a message. Clearing the active entitiy list has side-effects that should be handled. (those entities are known to the environment and to clients). As avoiding those side-effects is more complex, and as this problem is not expected to occur (with PR #4847 merged), there is no real incentive to implement this ATM. This issue was a contributing factor to bug #4217. With the other contributing factor removed (PR #4847), this commit makes sure this factor does not go unnoticed if it ever happens again.
This commit is contained in:
parent
33fdd48a76
commit
a067d40454
@ -77,6 +77,15 @@ void StaticObjectList::serialize(std::ostream &os)
|
|||||||
}
|
}
|
||||||
void StaticObjectList::deSerialize(std::istream &is)
|
void StaticObjectList::deSerialize(std::istream &is)
|
||||||
{
|
{
|
||||||
|
if (m_active.size()) {
|
||||||
|
errorstream << "StaticObjectList::deSerialize(): "
|
||||||
|
<< "deserializing objects while " << m_active.size()
|
||||||
|
<< " active objects already exist (not cleared). "
|
||||||
|
<< m_stored.size() << " stored objects _were_ cleared"
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
m_stored.clear();
|
||||||
|
|
||||||
// version
|
// version
|
||||||
u8 version = readU8(is);
|
u8 version = readU8(is);
|
||||||
// count
|
// count
|
||||||
|
Loading…
Reference in New Issue
Block a user