summaryrefslogtreecommitdiff
path: root/src/buildtool/multithreading
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@gmail.com>2023-04-15 16:28:33 +0200
committerOliver Reiche <oliver.reiche@huawei.com>2023-04-26 18:29:44 +0200
commitd762bfa1953933dfac0a29a74523c25719396b8c (patch)
tree1002b0aecc1af698f0349a4efb4bfc169886c60a /src/buildtool/multithreading
parent03e1019aca5d08e53bfeb455071d91561fc33039 (diff)
downloadjustbuild-d762bfa1953933dfac0a29a74523c25719396b8c.tar.gz
imports: Switch to Microsoft GSL implementation
... with two minor code base changes compared to previous use of gsl-lite: - dag.hpp: ActionNode::Ptr and ArtifactNode::Ptr are not wrapped in gsl::not_null<> anymore, due to lack of support for wrapping std::unique_ptr<>. More specifically, the move constructor is missing, rendering it impossible to use std::vector<>::emplace_back(). - utils/cpp/gsl.hpp: New header file added to implement the macros ExpectsAudit() and EnsureAudit(), asserts running only in debug builds, which were available in gsl-lite but are missing in MS GSL.
Diffstat (limited to 'src/buildtool/multithreading')
-rw-r--r--src/buildtool/multithreading/TARGETS17
-rw-r--r--src/buildtool/multithreading/async_map.hpp2
-rw-r--r--src/buildtool/multithreading/async_map_consumer.hpp2
-rw-r--r--src/buildtool/multithreading/async_map_node.hpp5
-rw-r--r--src/buildtool/multithreading/notification_queue.hpp8
-rw-r--r--src/buildtool/multithreading/task_system.cpp4
6 files changed, 17 insertions, 21 deletions
diff --git a/src/buildtool/multithreading/TARGETS b/src/buildtool/multithreading/TARGETS
index 2e5467f4..2d758589 100644
--- a/src/buildtool/multithreading/TARGETS
+++ b/src/buildtool/multithreading/TARGETS
@@ -9,8 +9,7 @@
{ "type": ["@", "rules", "CC", "library"]
, "name": ["notification_queue"]
, "hdrs": ["notification_queue.hpp"]
- , "deps":
- ["task", ["src/utils/cpp", "atomic"], ["@", "gsl-lite", "", "gsl-lite"]]
+ , "deps": ["task", ["src/utils/cpp", "atomic"], ["@", "gsl", "", "gsl"]]
, "stage": ["src", "buildtool", "multithreading"]
}
, "task_system":
@@ -18,7 +17,7 @@
, "name": ["task_system"]
, "hdrs": ["task_system.hpp"]
, "srcs": ["task_system.cpp"]
- , "deps": ["notification_queue", ["@", "gsl-lite", "", "gsl-lite"]]
+ , "deps": ["notification_queue", ["@", "gsl", "", "gsl"]]
, "stage": ["src", "buildtool", "multithreading"]
, "private-deps": ["task"]
}
@@ -26,19 +25,15 @@
{ "type": ["@", "rules", "CC", "library"]
, "name": ["async_map_node"]
, "hdrs": ["async_map_node.hpp"]
- , "deps": ["task", "task_system", ["@", "gsl-lite", "", "gsl-lite"]]
+ , "deps":
+ ["task", "task_system", ["src/utils/cpp", "gsl"], ["@", "gsl", "", "gsl"]]
, "stage": ["src", "buildtool", "multithreading"]
}
, "async_map":
{ "type": ["@", "rules", "CC", "library"]
, "name": ["async_map"]
, "hdrs": ["async_map.hpp"]
- , "deps":
- [ "task"
- , "task_system"
- , "async_map_node"
- , ["@", "gsl-lite", "", "gsl-lite"]
- ]
+ , "deps": ["task", "task_system", "async_map_node", ["@", "gsl", "", "gsl"]]
, "stage": ["src", "buildtool", "multithreading"]
}
, "async_map_consumer":
@@ -50,7 +45,7 @@
, "task_system"
, "async_map_node"
, "async_map"
- , ["@", "gsl-lite", "", "gsl-lite"]
+ , ["@", "gsl", "", "gsl"]
]
, "stage": ["src", "buildtool", "multithreading"]
}
diff --git a/src/buildtool/multithreading/async_map.hpp b/src/buildtool/multithreading/async_map.hpp
index 91ffd8c2..3267b312 100644
--- a/src/buildtool/multithreading/async_map.hpp
+++ b/src/buildtool/multithreading/async_map.hpp
@@ -23,7 +23,7 @@
#include <utility> // std::make_pair to use std::unordered_map's emplace()
#include <vector>
-#include "gsl-lite/gsl-lite.hpp"
+#include "gsl/gsl"
#include "src/buildtool/multithreading/async_map_node.hpp"
#include "src/buildtool/multithreading/task.hpp"
#include "src/buildtool/multithreading/task_system.hpp"
diff --git a/src/buildtool/multithreading/async_map_consumer.hpp b/src/buildtool/multithreading/async_map_consumer.hpp
index 3dcc0eff..0de6b36f 100644
--- a/src/buildtool/multithreading/async_map_consumer.hpp
+++ b/src/buildtool/multithreading/async_map_consumer.hpp
@@ -25,7 +25,7 @@
#include <unordered_set>
#include <vector>
-#include "gsl-lite/gsl-lite.hpp"
+#include "gsl/gsl"
#include "src/buildtool/multithreading/async_map.hpp"
#include "src/buildtool/multithreading/async_map_node.hpp"
#include "src/buildtool/multithreading/task.hpp"
diff --git a/src/buildtool/multithreading/async_map_node.hpp b/src/buildtool/multithreading/async_map_node.hpp
index c729582d..2c07f11b 100644
--- a/src/buildtool/multithreading/async_map_node.hpp
+++ b/src/buildtool/multithreading/async_map_node.hpp
@@ -19,9 +19,10 @@
#include <mutex>
#include <optional>
-#include "gsl-lite/gsl-lite.hpp"
+#include "gsl/gsl"
#include "src/buildtool/multithreading/task.hpp"
#include "src/buildtool/multithreading/task_system.hpp"
+#include "src/utils/cpp/gsl.hpp"
// Wrapper around Value to enable async access to it in a continuation-style
// programming way
@@ -154,7 +155,7 @@ class AsyncMapNode {
// Not thread safe, do not use unless the value has been already set
[[nodiscard]] auto GetValue() const& noexcept -> Value const& {
// Will only be checked in debug build
- gsl_ExpectsAudit(value_.has_value());
+ ExpectsAudit(value_.has_value());
return *value_;
}
[[nodiscard]] auto GetValue() && noexcept = delete;
diff --git a/src/buildtool/multithreading/notification_queue.hpp b/src/buildtool/multithreading/notification_queue.hpp
index 1df5d659..9d2f06eb 100644
--- a/src/buildtool/multithreading/notification_queue.hpp
+++ b/src/buildtool/multithreading/notification_queue.hpp
@@ -22,7 +22,7 @@
#include <shared_mutex>
#include <utility> // std::forward
-#include "gsl-lite/gsl-lite.hpp"
+#include "gsl/gsl"
#include "src/buildtool/multithreading/task.hpp"
#include "src/utils/cpp/atomic.hpp"
@@ -67,14 +67,14 @@ class WaitableZeroCounter {
class NotificationQueue {
public:
explicit NotificationQueue(
- gsl::not_null<WaitableZeroCounter*> total_workload)
- : total_workload_{std::move(total_workload)} {}
+ gsl::not_null<WaitableZeroCounter*> const& total_workload)
+ : total_workload_{total_workload} {}
NotificationQueue(NotificationQueue const& other) = delete;
NotificationQueue(NotificationQueue&& other) noexcept
: queue_{std::move(other.queue_)},
done_{other.done_},
- total_workload_{std::move(other.total_workload_)} {}
+ total_workload_{other.total_workload_} {}
~NotificationQueue() = default;
[[nodiscard]] auto operator=(NotificationQueue const& other)
diff --git a/src/buildtool/multithreading/task_system.cpp b/src/buildtool/multithreading/task_system.cpp
index cf9ed543..13c3caec 100644
--- a/src/buildtool/multithreading/task_system.cpp
+++ b/src/buildtool/multithreading/task_system.cpp
@@ -14,7 +14,7 @@
#include "src/buildtool/multithreading/task_system.hpp"
-#include "gsl-lite/gsl-lite.hpp"
+#include "gsl/gsl"
#include "src/buildtool/multithreading/task.hpp"
TaskSystem::TaskSystem() : TaskSystem(std::thread::hardware_concurrency()) {}
@@ -59,7 +59,7 @@ void TaskSystem::Finish() noexcept {
}
void TaskSystem::Run(std::size_t idx) {
- gsl_Expects(thread_count_ > 0);
+ Expects(thread_count_ > 0);
while (not shutdown_) {
std::optional<Task> t{};