Skip to content
Permalink
Browse files

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.
  • Loading branch information...
Rogier-5 authored and sfan5 committed Dec 11, 2016
1 parent 33fdd48 commit a067d404542704c3bcc284262f588fba398b3102
Showing with 9 additions and 0 deletions.
  1. +9 −0 src/staticobject.cpp
@@ -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

0 comments on commit a067d40

Please sign in to comment.
You can’t perform that action at this time.