Skip to content
Snippets Groups Projects

Make sure barriers do not think they depend on themselves

Merged Gerhard Raven requested to merge barrier-infinite-loop into master
All threads resolved!
2 files
+ 25
4
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -185,6 +185,10 @@ findAllEdges( gsl::not_null<VNode const*> vnode, std::set<std::array<gsl::not_nu
}
}
// check that nodes do not depend on themselves....
assert( std::none_of( nodePrerequisites.begin(), nodePrerequisites.end(),
[]( const auto& kv ) { return kv.second.find( kv.first ) != kv.second.end(); } ) );
return nodePrerequisites;
}
@@ -206,6 +210,11 @@ bool CFDependenciesMet( gsl::not_null<VNode*>
std::vector<gsl::not_null<BasicNode*>>
resolveDependencies( std::set<gsl::not_null<VNode*>>& unordered,
std::map<gsl::not_null<VNode*>, std::set<gsl::not_null<VNode*>>> const& nodePrerequisites ) {
// check that nodes do not depend on themselves....
assert( std::none_of( nodePrerequisites.begin(), nodePrerequisites.end(),
[]( const auto& kv ) { return kv.second.find( kv.first ) != kv.second.end(); } ) );
std::vector<gsl::not_null<VNode*>> ordered;
std::set<gsl::not_null<VNode*>> orderedSet;
ordered.reserve( unordered.size() );
@@ -229,6 +238,15 @@ resolveDependencies( std::set<gsl::not_null<VNode*>>&
message += "Unordered ones: \n";
for ( auto i : unordered ) {
message += getNameOfVNode( *i );
message += " not yet satisfied dependencies: ";
auto const it = nodePrerequisites.find( i );
if ( it != nodePrerequisites.end() ) {
for ( auto const& pr : it->second ) {
if ( orderedSet.find( pr ) != orderedSet.end() ) continue;
message += " ";
message += getNameOfVNode( *pr );
}
}
message += "\n";
}
message += "Ordered ones: \n";
Loading