aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/lib/rfnoc/rfnoc_graph.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/host/lib/rfnoc/rfnoc_graph.cpp b/host/lib/rfnoc/rfnoc_graph.cpp
index 32a9b0071..9cb9edfe8 100644
--- a/host/lib/rfnoc/rfnoc_graph.cpp
+++ b/host/lib/rfnoc/rfnoc_graph.cpp
@@ -908,7 +908,26 @@ namespace uhd { namespace rfnoc { namespace detail {
rfnoc_graph::sptr make_rfnoc_graph(
detail::rfnoc_device::sptr dev, const uhd::device_addr_t& device_addr)
{
- return std::make_shared<rfnoc_graph_impl>(dev, device_addr);
+ static std::mutex _map_mutex;
+ static std::map<std::weak_ptr<rfnoc_device>,
+ std::weak_ptr<rfnoc_graph>,
+ std::owner_less<std::weak_ptr<rfnoc_device>>>
+ dev_to_graph;
+ rfnoc_graph::sptr graph;
+
+ // Check if a graph was already created for this device
+ std::lock_guard<std::mutex> lock(_map_mutex);
+ if (dev_to_graph.count(dev) and not dev_to_graph[dev].expired()) {
+ graph = dev_to_graph[dev].lock();
+ if (graph != nullptr) {
+ return graph;
+ }
+ }
+
+ // Create a new graph
+ graph = std::make_shared<rfnoc_graph_impl>(dev, device_addr);
+ dev_to_graph[dev] = graph;
+ return graph;
}
}}} /* namespace uhd::rfnoc::detail */