systemc: Make orphans top level objects instead of panic-ing.

When a simulation ends, the sc_objects it contains are destroyed one
by one, not necessarily in hierarchy order. That means that a parent
object can legitimately be destroyed before its children. Instead of
panic-ing when that inevitably happens, this change makes gem5 turn
those children into top level objects.

Change-Id: Icad9c99310fbc3ddcadbbb4f8a990b4fbfe35bdf
Reviewed-on: https://gem5-review.googlesource.com/12035
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
Gabe Black
2018-07-19 17:12:31 -07:00
parent b7ab029883
commit bc46b4ac03
2 changed files with 6 additions and 2 deletions

View File

@@ -118,7 +118,12 @@ Object::operator = (const Object &)
Object::~Object()
{
panic_if(!children.empty(), "Parent object still has children.\n");
// Promote all children to be top level objects.
for (auto child: children) {
addObject(&topLevelObjects, child);
child->_gem5_object->parent = nullptr;
}
children.clear();
if (parent)
popObject(&parent->_gem5_object->children, _name);

View File

@@ -99,7 +99,6 @@ class Object
Objects children;
Events events;
sc_core::sc_object *parent;
ObjectsIt parentIt;
sc_core::sc_attr_cltn cltn;
};