diff options
author | Naushir Patuck <naush@raspberrypi.com> | 2021-05-10 10:58:12 +0100 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-05-11 03:13:45 +0300 |
commit | 7de2bbed9b0965e894dbbecd3b0d96c375b3ef90 (patch) | |
tree | ccc4b8574fea12e771b9884b426a2101a93a5992 /src/ipa | |
parent | 340477f987f13c7e02b8848b190c6ef75608f6e8 (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>
Diffstat (limited to 'src/ipa')
-rw-r--r-- | src/ipa/raspberrypi/controller/metadata.hpp | 9 |
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; } |