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:
@@ -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);
|
||||
|
||||
@@ -99,7 +99,6 @@ class Object
|
||||
Objects children;
|
||||
Events events;
|
||||
sc_core::sc_object *parent;
|
||||
ObjectsIt parentIt;
|
||||
|
||||
sc_core::sc_attr_cltn cltn;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user