summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2021-05-10 10:58:12 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-05-11 03:13:45 +0300
commit7de2bbed9b0965e894dbbecd3b0d96c375b3ef90 (patch)
treeccc4b8574fea12e771b9884b426a2101a93a5992
parent340477f987f13c7e02b8848b190c6ef75608f6e8 (diff)
ipa: raspberrypi: Switch to std::scoped_lock in the Metadata class
Replace std::lock_guard with std::scoped_lock. When locking a single mutex, both are functionally the same. When locking two mutexes in the operator= overload, the scoped_lock uses a deadlock avoidance algorithm to avoid deadlock. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/ipa/raspberrypi/controller/metadata.hpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/ipa/raspberrypi/controller/metadata.hpp b/src/ipa/raspberrypi/controller/metadata.hpp
index 07dd28ed..e735cfbe 100644
--- a/src/ipa/raspberrypi/controller/metadata.hpp
+++ b/src/ipa/raspberrypi/controller/metadata.hpp
@@ -22,14 +22,14 @@ public:
template<typename T>
void Set(std::string const &tag, T const &value)
{
- std::lock_guard<std::mutex> lock(mutex_);
+ std::scoped_lock lock(mutex_);
data_[tag] = value;
}
template<typename T>
int Get(std::string const &tag, T &value) const
{
- std::lock_guard<std::mutex> lock(mutex_);
+ std::scoped_lock lock(mutex_);
auto it = data_.find(tag);
if (it == data_.end())
return -1;
@@ -39,14 +39,13 @@ public:
void Clear()
{
- std::lock_guard<std::mutex> lock(mutex_);
+ std::scoped_lock lock(mutex_);
data_.clear();
}
Metadata &operator=(Metadata const &other)
{
- std::lock_guard<std::mutex> lock(mutex_);
- std::lock_guard<std::mutex> other_lock(other.mutex_);
+ std::scoped_lock lock(mutex_, other.mutex_);
data_ = other.data_;
return *this;
}