diff options
| author | Frederic Riss <friss@apple.com> | 2018-05-11 18:21:11 +0000 |
|---|---|---|
| committer | Frederic Riss <friss@apple.com> | 2018-05-11 18:21:11 +0000 |
| commit | d10d3795f737ca8a0f602e8a442728d301e65378 (patch) | |
| tree | 48bfd332e4b87f99a6d443d656f3d16b4763bc1a /lldb/source/Target/Process.cpp | |
| parent | 5fb6437012ce6020a86ff4dfdae56306fea8d80a (diff) | |
| download | bcm5719-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.cpp | 12 |
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); -} - |

