aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/include/uhdlib
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2019-08-01 17:45:29 -0700
committerMartin Braun <martin.braun@ettus.com>2019-11-26 11:49:34 -0800
commitec991efc06676521267aa05259df59898c758338 (patch)
tree3eab00d1062cd0af9a7fc9e153ed85e88165b62c /host/lib/include/uhdlib
parent1e51dd7774017cbad84315284596417636ab044d (diff)
downloaduhd-ec991efc06676521267aa05259df59898c758338.tar.gz
uhd-ec991efc06676521267aa05259df59898c758338.tar.bz2
uhd-ec991efc06676521267aa05259df59898c758338.zip
rfnoc: graph: Lock release/commit state
Property propagation and action handling depend on the release state, but they are lengthy operations. It is therefore imperative to not change the release/commit state during those methods. This commit changes the following: - Change the release state counter from an atomic to a non-atomic variable - Instead, use a mutex to lock the release state counter, and use the same mutex for locking access to the property propagation and action handling The rfnoc_graph now tries to release the graph before shutting down blocks to make sure they don't get destroyed while those algorithms are still running.
Diffstat (limited to 'host/lib/include/uhdlib')
-rw-r--r--host/lib/include/uhdlib/rfnoc/graph.hpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/graph.hpp b/host/lib/include/uhdlib/rfnoc/graph.hpp
index 87977a1dc..5b735b624 100644
--- a/host/lib/include/uhdlib/rfnoc/graph.hpp
+++ b/host/lib/include/uhdlib/rfnoc/graph.hpp
@@ -7,14 +7,14 @@
#ifndef INCLUDED_LIBUHD_GRAPH_HPP
#define INCLUDED_LIBUHD_GRAPH_HPP
-#include <uhd/rfnoc/graph_edge.hpp>
#include <uhd/rfnoc/actions.hpp>
+#include <uhd/rfnoc/graph_edge.hpp>
#include <uhd/rfnoc/node.hpp>
#include <boost/graph/adjacency_list.hpp>
-#include <tuple>
-#include <memory>
#include <deque>
-#include <atomic>
+#include <memory>
+#include <mutex>
+#include <tuple>
namespace uhd { namespace rfnoc { namespace detail {
@@ -273,9 +273,12 @@ private:
// message is sent
std::recursive_mutex _action_mutex;
+ //! Changes to the release/commit state of the graph are locked with this mutex
+ std::recursive_mutex _release_mutex;
+
//! This counter gets decremented everytime commit() is called. When zero,
// the graph is committed.
- std::atomic<size_t> _release_count{1};
+ size_t _release_count{1};
};