diff options
Diffstat (limited to 'src/systemc/core/event.cc')
-rw-r--r-- | src/systemc/core/event.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/systemc/core/event.cc b/src/systemc/core/event.cc index 1623cf9e8..05670fe59 100644 --- a/src/systemc/core/event.cc +++ b/src/systemc/core/event.cc @@ -29,6 +29,7 @@ #include "systemc/core/event.hh" +#include <algorithm> #include <cstring> #include <utility> @@ -51,12 +52,14 @@ Event::Event(sc_core::sc_event *_sc_event, const char *_basename) : parent = p->obj()->sc_obj(); else if (scheduler.current()) parent = scheduler.current(); + else + parent = nullptr; if (parent) { Object *obj = Object::getFromScObject(parent); - parentIt = obj->addChildEvent(_sc_event); + obj->addChildEvent(_sc_event); } else { - parentIt = topLevelEvents.emplace(topLevelEvents.end(), _sc_event); + topLevelEvents.emplace(topLevelEvents.end(), _sc_event); } if (parent) @@ -74,9 +77,12 @@ Event::~Event() { if (parent) { Object *obj = Object::getFromScObject(parent); - obj->delChildEvent(parentIt); + obj->delChildEvent(_sc_event); } else { - std::swap(*parentIt, topLevelEvents.back()); + EventsIt it = find(topLevelEvents.begin(), topLevelEvents.end(), + _sc_event); + assert(it != topLevelEvents.end()); + std::swap(*it, topLevelEvents.back()); topLevelEvents.pop_back(); } |