mirror of
https://github.com/EttusResearch/uhd.git
synced 2026-10-25 17:36:10 +00:00
uhd: lambda capture the node instead of vert desc
This commit adds another resolve_all_properties method to use the node instead of the vertex descriptor. The vertex descriptor could be removed. This could cause the lambda capture to have an outdated vertex descriptor, which would result in a hang when looking for it. This resolves the issue by capturing the node and looking for the vertex descriptor. Signed-off-by: Steven Koo <steven.koo@ni.com>
This commit is contained in:
parent
16b38ff6c6
commit
e9176649d1
@ -171,6 +171,9 @@ private:
|
||||
void resolve_all_properties(uhd::rfnoc::resolve_context context,
|
||||
rfnoc_graph_t::vertex_descriptor initial_node);
|
||||
|
||||
void resolve_all_properties(uhd::rfnoc::resolve_context context,
|
||||
node_ref_t initial_node);
|
||||
|
||||
/**************************************************************************
|
||||
* Action API
|
||||
*************************************************************************/
|
||||
|
||||
@ -89,11 +89,11 @@ void graph_t::connect(node_ref_t src_node, node_ref_t dst_node, graph_edge_t edg
|
||||
auto dst_vertex_desc = _node_map.at(dst_node);
|
||||
|
||||
// Set resolver callbacks:
|
||||
node_accessor.set_resolve_all_callback(src_node, [this, src_vertex_desc]() {
|
||||
this->resolve_all_properties(resolve_context::NODE_PROP, src_vertex_desc);
|
||||
node_accessor.set_resolve_all_callback(src_node, [this, src_node]() {
|
||||
this->resolve_all_properties(resolve_context::NODE_PROP, src_node);
|
||||
});
|
||||
node_accessor.set_resolve_all_callback(dst_node, [this, dst_vertex_desc]() {
|
||||
this->resolve_all_properties(resolve_context::NODE_PROP, dst_vertex_desc);
|
||||
node_accessor.set_resolve_all_callback(dst_node, [this, dst_node]() {
|
||||
this->resolve_all_properties(resolve_context::NODE_PROP, dst_node);
|
||||
});
|
||||
// Set post action callbacks:
|
||||
node_accessor.set_post_action_callback(
|
||||
@ -324,6 +324,9 @@ void graph_t::resolve_all_properties(
|
||||
auto begin_it = topo_sorted_nodes.begin();
|
||||
auto end_it = topo_sorted_nodes.end();
|
||||
while (*node_it != initial_node) {
|
||||
if (node_it == end_it) {
|
||||
throw uhd::rfnoc_error("Cannot find node in graph!");
|
||||
}
|
||||
// We know *node_it must be == initial_node at some point, because
|
||||
// otherwise, initial_dirty_nodes would have been empty
|
||||
node_it++;
|
||||
@ -439,6 +442,13 @@ void graph_t::resolve_all_properties(
|
||||
}
|
||||
}
|
||||
|
||||
void graph_t::resolve_all_properties(
|
||||
resolve_context context, node_ref_t initial_node)
|
||||
{
|
||||
auto initial_node_vertex_desc = _node_map.at(initial_node);
|
||||
resolve_all_properties(context, initial_node_vertex_desc);
|
||||
}
|
||||
|
||||
void graph_t::enqueue_action(
|
||||
node_ref_t src_node, res_source_info src_edge, action_info::sptr action)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user