Skip to content

Commit

Permalink
1. fixed Safe bug; 2. stop loop returns FORCE_STOPPED
Browse files Browse the repository at this point in the history
  • Loading branch information
godsme committed Mar 3, 2021
1 parent 41fc5a3 commit 1b8a53e
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
4 changes: 2 additions & 2 deletions include/trans-dsl/sched/helper/SafeHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace details {
template<typename T_ACTION>
struct Safe : SchedSafe {
template<TransListenerObservedAids const& AIDs>
class ActionRealType : SchedSafe {
class ActionRealType : public SchedSafe {
using Action = ActionRealTypeTraits_t<AIDs, T_ACTION>;
CONCEPT_ASSERT(SchedActionConcept<Action>);

Expand All @@ -30,6 +30,6 @@ namespace details {

TSL_NS_END

#define __safe(...) TSL_NS::details::Safe_<TSL_NS::details::AutoAction::SequentialTrait_t<__VA_ARGS__>>
#define __safe(...) TSL_NS::details::Safe<TSL_NS::details::AutoAction::SequentialTrait_t<__VA_ARGS__>>

#endif //TRANS_DSL_2_SAFEHELPER_H
6 changes: 5 additions & 1 deletion src/sched/action/SchedLoop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,18 @@ auto SchedLoop::exec(TransactionContext& context) -> Status {
////////////////////////////////////////////////////////////////////////////////////////
auto SchedLoop::handleEvent_(TransactionContext& context, Event const& event) -> Status {
Status status = action->handleEvent(context, event);
if (is_working_status(status) || stopping) {
if (is_working_status(status)) {
return status;
}

if(cub::is_failed_status(status)) {
reportFailure(status);
}

if(stopping) {
return Result::FORCE_STOPPED;
}

return looping(context);
}

Expand Down
9 changes: 5 additions & 4 deletions src/sched/action/SchedSafe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,30 @@

#include <trans-dsl/sched/action/SchedSafe.h>
#include <trans-dsl/utils/ActionStatus.h>
#include <trans-dsl/utils/AssertionHelper.h>

TSL_NS_BEGIN

///////////////////////////////////////////////////////////////////////////////
auto SchedSafe::exec(TransactionContext& context) -> Status {
if(state != State::IDLE) return Result::FATAL_BUG;
BUG_CHECK(state == State::IDLE);
Status status = ROLE(SchedAction).exec(context);
state = is_working_status(status) ? State::WORKING : State::DONE;
return status;
}

///////////////////////////////////////////////////////////////////////////////
auto SchedSafe::handleEvent(TransactionContext& context, Event const& event) -> Status {
if(state != State::WORKING) return FATAL_BUG;
BUG_CHECK(state == State::WORKING);
Status status = ROLE(SchedAction).handleEvent(context, event);
if(is_working_status(status)) {
if(!is_working_status(status)) {
state = State::DONE;
}
return status;
}
///////////////////////////////////////////////////////////////////////////////
auto SchedSafe::stop(TransactionContext&, Status) -> Status {
if(state != State::WORKING) return FATAL_BUG;
BUG_CHECK(state == State::WORKING);
return Result::CONTINUE;
}

Expand Down

0 comments on commit 1b8a53e

Please sign in to comment.