Skip to content
This repository was archived by the owner on Jul 30, 2020. It is now read-only.

Serialize clang_createIndex to prevent race condition (concurrent modify/read to FirstTarget defined in lib/Support/TargetRegistry.cpp) #117

Merged
merged 1 commit into from
Dec 7, 2017

Conversation

MaskRay
Copy link
Contributor

@MaskRay MaskRay commented Dec 7, 2017

Hopefully fixes #43

RegisterTarget modifies a global variable FirstTarget which may be concurrently read by other threads that are calling clang_createIndex.

(gdb) bt                    
#0  0x00007fd5ac25d280 in llvm::TargetRegistry::RegisterTarget(llvm::Target&, char const*, char const*, bool (*)(llvm::Triple::ArchType), bool) ()
   from /home/maskray/Dev/Util/cquery/build/clang+llvm-5.0.0-linux-x86_64-ubuntu14.04/lib/libclang.so.5
#1  0x00007fd5ab8fd5d8 in LLVMInitializeAArch64TargetInfo ()                                                      
   from /home/maskray/Dev/Util/cquery/build/clang+llvm-5.0.0-linux-x86_64-ubuntu14.04/lib/libclang.so.5
#2  0x00007fd5aae90a86 in llvm::InitializeAllTargets() ()                                                         
   from /home/maskray/Dev/Util/cquery/build/clang+llvm-5.0.0-linux-x86_64-ubuntu14.04/lib/libclang.so.5
#3  0x00007fd5aae908de in clang_createIndex ()           
   from /home/maskray/Dev/Util/cquery/build/clang+llvm-5.0.0-linux-x86_64-ubuntu14.04/lib/libclang.so.5
#4  0x000055bd41986583 in ClangIndex::ClangIndex (this=0x7fd5a27fbd78, exclude_declarations_from_pch=1, 
    display_diagnostics=0) at ../src/clang_index.cc:8    
#5  0x000055bd4198655e in ClangIndex::ClangIndex (this=0x7fd5a27fbd78) at ../src/clang_index.cc:3
#6  0x000055bd4198d31a in IndexMain (config=0x55bd4333ea90, file_consumer_shared=0x7ffeaa7e75b0, 
    timestamp_manager=0x7ffeaa7e71f0, import_manager=0x7ffeaa7e7250, project=0x7ffeaa7e7670, 
    working_files=0x7ffeaa7e7610, waiter=0x7ffeaa7e7f10, queue=0x7ffeaa7e7a40) at ../src/command_line.cc:509
#7  0x000055bd41a4864c in (anonymous namespace)::InitializeHandler::<lambda()>::operator()(void) const (
    __closure=0x55bd43341ac8) at ../src/messages/initialize.cc:175                                                
#8  0x000055bd41a4a7bb in std::_Function_handler<WorkThread::Result(), (anonymous namespace)::InitializeHandler::Run((anonymous namespace)::Ipc_InitializeRequest*)::<lambda()> >::_M_invoke(const std::_Any_data &) (
    __functor=...) at /usr/include/c++/6/functional:1717 
#9  0x000055bd41b4ec12 in std::function<WorkThread::Result ()>::operator()() const (this=0x55bd43341ac8)
    at /usr/include/c++/6/functional:2127                
#10 0x000055bd41b4e4ee in WorkThread::<lambda()>::operator()(void) const (__closure=0x55bd43341aa8)
    at ../src/work_thread.cc:18                          
#11 0x000055bd41b4eb78 in std::_Bind_simple<WorkThread::StartThread(const string&, const std::function<WorkThread::Result()>&)::<lambda()>()>::_M_invoke<>(std::_Index_tuple<>) (this=0x55bd43341aa8)
    at /usr/include/c++/6/functional:1391                
#12 0x000055bd41b4eb15 in std::_Bind_simple<WorkThread::StartThread(const string&, const std::function<WorkThread::Result()>&)::<lambda()>()>::operator()(void) (this=0x55bd43341aa8) at /usr/include/c++/6/functional:1380
#13 0x000055bd41b4eaf4 in std::thread::_State_impl<std::_Bind_simple<WorkThread::StartThread(const string&, const std::function<WorkThread::Result()>&)::<lambda()>()> >::_M_run(void) (this=0x55bd43341aa0)
    at /usr/include/c++/6/thread:197                     
#14 0x00007fd5aa771e6f in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6

…ify/read to FirstTarget defined in lib/Support/TargetRegistry.cpp)
@jacobdufault jacobdufault merged commit 4371789 into jacobdufault:master Dec 7, 2017
@jacobdufault
Copy link
Owner

Hope it fixes it, code LG

@MaskRay MaskRay deleted the fix-ClangIndex-race branch December 10, 2017 03:20
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Got stuck at Creating completion session with arguments with full cpu usage
2 participants