summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/Process.cpp
diff options
context:
space:
mode:
authorFrederic Riss <friss@apple.com>2018-05-11 18:21:11 +0000
committerFrederic Riss <friss@apple.com>2018-05-11 18:21:11 +0000
commitd10d3795f737ca8a0f602e8a442728d301e65378 (patch)
tree48bfd332e4b87f99a6d443d656f3d16b4763bc1a /lldb/source/Target/Process.cpp
parent5fb6437012ce6020a86ff4dfdae56306fea8d80a (diff)
downloadbcm5719-llvm-d10d3795f737ca8a0f602e8a442728d301e65378.tar.gz
bcm5719-llvm-d10d3795f737ca8a0f602e8a442728d301e65378.zip
Add a lock to PlatformPOSIX::DoLoadImage
Summary: Multiple threads could be calling into DoLoadImage concurrently, only one should be allowed to create the UtilityFunction. Reviewers: jingham Subscribers: emaste, lldb-commits Differential Revision: https://reviews.llvm.org/D46733 llvm-svn: 332115
Diffstat (limited to 'lldb/source/Target/Process.cpp')
-rw-r--r--lldb/source/Target/Process.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index f957645e078..996782b5378 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -6164,14 +6164,12 @@ Status Process::UpdateAutomaticSignalFiltering() {
return Status();
}
-UtilityFunction *Process::GetLoadImageUtilityFunction(Platform *platform) {
+UtilityFunction *Process::GetLoadImageUtilityFunction(
+ Platform *platform,
+ llvm::function_ref<std::unique_ptr<UtilityFunction>()> factory) {
if (platform != GetTarget().GetPlatform().get())
return nullptr;
+ std::call_once(m_dlopen_utility_func_flag_once,
+ [&] { m_dlopen_utility_func_up = factory(); });
return m_dlopen_utility_func_up.get();
}
-
-void Process::SetLoadImageUtilityFunction(std::unique_ptr<UtilityFunction>
- utility_func_up) {
- m_dlopen_utility_func_up.swap(utility_func_up);
-}
-
OpenPOWER on IntegriCloud