aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectProcess.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-06-13 19:29:16 +0000
committerZachary Turner <zturner@google.com>2018-06-13 19:29:16 +0000
commit1b76a128a8a6610c3063cc105bfb2cb2857ddcdf (patch)
tree6311a83450b7ca36e02291ed8f82ab4d8cbdb78e /lldb/source/Commands/CommandObjectProcess.cpp
parent9d6fabf9e37b1c2a69ba5d15b1dcbcb044990dc6 (diff)
downloadllvm-1b76a128a8a6610c3063cc105bfb2cb2857ddcdf.zip
llvm-1b76a128a8a6610c3063cc105bfb2cb2857ddcdf.tar.gz
llvm-1b76a128a8a6610c3063cc105bfb2cb2857ddcdf.tar.bz2
Enable ThreadPool to support tasks that return values.
Previously ThreadPool could only queue async "jobs", i.e. work that was done for its side effects and not for its result. It's useful occasionally to queue async work that returns a value. From an API perspective, this is very intuitive. The previous API just returned a shared_future<void>, so all we need to do is make it return a shared_future<T>, where T is the type of value that the operation returns. Making this work required a little magic, but ultimately it's not too bad. Instead of keeping a shared queue<packaged_task<void()>> we just keep a shared queue<unique_ptr<TaskBase>>, where TaskBase is a class with a pure virtual execute() method, then have a templated derived class that stores a packaged_task<T()>. Everything else works out pretty cleanly. Differential Revision: https://reviews.llvm.org/D48115 llvm-svn: 334643
Diffstat (limited to 'lldb/source/Commands/CommandObjectProcess.cpp')
0 files changed, 0 insertions, 0 deletions