aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/Machine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/Machine.cpp')
-rw-r--r--src/engine/Machine.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/engine/Machine.cpp b/src/engine/Machine.cpp
index 815ba5b..61cad67 100644
--- a/src/engine/Machine.cpp
+++ b/src/engine/Machine.cpp
@@ -78,6 +78,10 @@ Machine::remove_node(SharedPtr<Node> node)
void
Machine::reset()
{
+ for (size_t i=0; i < MAX_ACTIVE_NODES; ++i) {
+ _active_nodes[i].reset();
+ }
+
if (!_is_finished) {
for (Nodes::const_iterator n = _nodes.begin(); n != _nodes.end(); ++n) {
const SharedPtr<Node> node = (*n);
@@ -88,10 +92,6 @@ Machine::reset()
assert(! node->is_active());
}
}
-
- for (size_t i=0; i < MAX_ACTIVE_NODES; ++i) {
- _active_nodes[i].reset();
- }
_time = 0;
_is_finished = false;
@@ -234,7 +234,8 @@ Machine::run(const Raul::TimeSlice& time)
if ( ! _nodes.empty()) {
for (Nodes::const_iterator n = _nodes.begin(); n != _nodes.end(); ++n) {
- assert( ! (*n)->is_active());
+ if ((*n)->is_active())
+ (*n)->exit(sink, 0);
if ((*n)->is_initial()) {
if (enter_node(sink, (*n)))
@@ -257,6 +258,10 @@ Machine::run(const Raul::TimeSlice& time)
// No more active states, machine is finished
if (!earliest) {
+#ifndef NDEBUG
+ for (Nodes::const_iterator n = _nodes.begin(); n != _nodes.end(); ++n)
+ assert( ! (*n)->is_active());
+#endif
_is_finished = true;
break;