From d10d3795f737ca8a0f602e8a442728d301e65378 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Fri, 11 May 2018 18:21:11 +0000 Subject: 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 --- lldb/source/Target/Process.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'lldb/source/Target/Process.cpp') 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()> 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 - utility_func_up) { - m_dlopen_utility_func_up.swap(utility_func_up); -} - -- cgit v1.2.3