Skip to content

Commit

Permalink
Handle multiple deserialization of a block's entities
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Rogier-5 authored and sfan5 committed Aug 12, 2019
1 parent 33fdd48 commit a067d40
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/staticobject.cpp
Expand Up @@ -77,6 +77,15 @@ void StaticObjectList::serialize(std::ostream &os)
}
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
u8 version = readU8(is);
// count
Expand Down

0 comments on commit a067d40

Please sign in to comment.