summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/ThreadPool.cpp
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-11-28 09:17:12 +0000
committerDavide Italiano <davide@freebsd.org>2016-11-28 09:17:12 +0000
commit0f0d5d8f8d4c0b1d325822406cb1a94fff3bf105 (patch)
tree74dc5f9cebe2e8de6e9ba827bc5f9c7e5e1a4e25 /llvm/lib/Support/ThreadPool.cpp
parent3dd87dad64e664a35ce5a455cd66d74be43374aa (diff)
downloadbcm5719-llvm-0f0d5d8f8d4c0b1d325822406cb1a94fff3bf105.tar.gz
bcm5719-llvm-0f0d5d8f8d4c0b1d325822406cb1a94fff3bf105.zip
[ThreadPool] Rollback recent changes until I figure out the breakage.
llvm-svn: 288018
Diffstat (limited to 'llvm/lib/Support/ThreadPool.cpp')
-rw-r--r--llvm/lib/Support/ThreadPool.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Support/ThreadPool.cpp b/llvm/lib/Support/ThreadPool.cpp
index 022f32a1378..db03a4d6240 100644
--- a/llvm/lib/Support/ThreadPool.cpp
+++ b/llvm/lib/Support/ThreadPool.cpp
@@ -82,7 +82,7 @@ void ThreadPool::wait() {
[&] { return !ActiveThreads && Tasks.empty(); });
}
-void ThreadPool::asyncImpl(TaskTy Task) {
+std::shared_future<ThreadPool::VoidTy> ThreadPool::asyncImpl(TaskTy Task) {
/// Wrap the Task in a packaged_task to return a future object.
PackagedTaskTy PackagedTask(std::move(Task));
auto Future = PackagedTask.get_future();
@@ -96,6 +96,7 @@ void ThreadPool::asyncImpl(TaskTy Task) {
Tasks.push(std::move(PackagedTask));
}
QueueCondition.notify_one();
+ return Future.share();
}
// The destructor joins all threads, waiting for completion.
@@ -135,7 +136,7 @@ void ThreadPool::wait() {
}
}
-void ThreadPool::asyncImpl(TaskTy Task) {
+std::shared_future<ThreadPool::VoidTy> ThreadPool::asyncImpl(TaskTy Task) {
#ifndef _MSC_VER
// Get a Future with launch::deferred execution using std::async
auto Future = std::async(std::launch::deferred, std::move(Task)).share();
@@ -147,6 +148,7 @@ void ThreadPool::asyncImpl(TaskTy Task) {
PackagedTaskTy PackagedTask([Future](bool) -> bool { Future.get(); return false; });
#endif
Tasks.push(std::move(PackagedTask));
+ return Future;
}
ThreadPool::~ThreadPool() {
OpenPOWER on IntegriCloud