diff --git a/src/vt/termination/term_state.cc b/src/vt/termination/term_state.cc index 57c5dc10e4..76cb40d251 100644 --- a/src/vt/termination/term_state.cc +++ b/src/vt/termination/term_state.cc @@ -121,15 +121,14 @@ TermCounterType TermState::decrementDependency() { return --deps_; } -bool TermState::readySubmitParent(bool const needs_active) const { +bool TermState::readySubmitParent() const { vtAssert( num_children_ != uninitialized_destination, "Children must be valid" ); - auto const ret = (epoch_active_ or not needs_active) and - recv_child_count_ == num_children_ and local_terminated_ and - submitted_wave_ == cur_wave_ - 1 and not term_detected_ and - deps_ == 0; + auto const ret = epoch_active_ and local_terminated_ and + deps_ == 0 and recv_child_count_ == num_children_ and + submitted_wave_ == cur_wave_ - 1 and not term_detected_; vt_debug_print( verbose, term, diff --git a/src/vt/termination/term_state.h b/src/vt/termination/term_state.h index 5cbae03b5d..1e0d2aaa25 100644 --- a/src/vt/termination/term_state.h +++ b/src/vt/termination/term_state.h @@ -66,7 +66,7 @@ struct TermState : EpochDependency, EpochLabel { void notifyLocalTerminated(bool const terminated = true); void submitToParent(bool const is_root, bool const setup = false); void receiveContinueSignal(TermWaveType const& wave); - bool readySubmitParent(bool const needs_active = true) const; + bool readySubmitParent() const; EventCountType getRecvChildCount() const; EpochType getEpoch() const; TermWaveType getCurWave() const; @@ -76,6 +76,8 @@ struct TermState : EpochDependency, EpochLabel { void incrementDependency(); TermCounterType decrementDependency(); + inline bool isActive() const { return epoch_active_; } + TermState( EpochType const& in_epoch, bool const in_local_terminated, bool const active, NodeType const& children diff --git a/src/vt/termination/termination.cc b/src/vt/termination/termination.cc index a413df460c..4d3eb497fb 100644 --- a/src/vt/termination/termination.cc +++ b/src/vt/termination/termination.cc @@ -172,16 +172,16 @@ TerminationDetector::getDSTerm(EpochType epoch, bool is_root) { } void TerminationDetector::maybePropagate() { - if (any_epoch_state_.readySubmitParent()) { + if (any_epoch_state_.isActive() and any_epoch_state_.readySubmitParent()) { propagateEpoch(any_epoch_state_); } - if (hang_.readySubmitParent()) { + if (hang_.isActive() and hang_.readySubmitParent()) { propagateEpoch(hang_); } for (auto&& state : epoch_state_) { - if (state.second.readySubmitParent()) { + if (state.second.isActive() and state.second.readySubmitParent()) { propagateEpoch(state.second); } } @@ -202,7 +202,7 @@ void TerminationDetector::propagateEpochExternalState( state.notifyChildReceive(); - if (state.readySubmitParent()) { + if (state.isActive() and state.readySubmitParent()) { propagateEpoch(state); } } diff --git a/src/vt/termination/termination.impl.h b/src/vt/termination/termination.impl.h index 6b61c87e6f..f9c2b4730e 100644 --- a/src/vt/termination/termination.impl.h +++ b/src/vt/termination/termination.impl.h @@ -97,7 +97,7 @@ inline void TerminationDetector::produceConsumeState( print_bool(produce) ); - if (state.readySubmitParent()) { + if (state.isActive() and state.readySubmitParent()) { propagateEpoch(state); } }