Open
Description
haltTree
resets the tree status to IDLE
which then in the tickRoot
only breaks out of the inner loop, which is then restarted by the outer loop
NodeStatus Tree::tickRoot(TickOption opt, std::chrono::milliseconds sleep_time)
{
...
// Always run if IDLE
while (status == NodeStatus::IDLE ||
(opt == TickOption::WHILE_RUNNING && status == NodeStatus::RUNNING))
{
...
// Inner loop. The previous tick might have triggered the wake-up
// in this case, unless TickOption::EXACTLY_ONCE, we tick again
while( opt != TickOption::EXACTLY_ONCE &&
status == NodeStatus::RUNNING &&
wake_up_->waitFor(std::chrono::milliseconds(0)) )
{
status = rootNode()->executeTick();
// Due to halt tree status is now IDLE, normal exiting operation would be SUCCESS or FAIL
}
...
}
return status;
}