[PATCH] Change llvm::sys::Mutex implementation to use STL-provided mutexes.

Zachary Turner zturner at google.com
Thu May 29 16:25:54 PDT 2014


It looks like the issue is that we're trying to acquire the mutex during
process shutdown.  Specifically, here's a partial callstack:

  libclang.dll!mtx_do_lock(_Mtx_internal_imp_t * * mtx=0x01b118e4, const
xtime * target=0x00000000) Line 67 C++
  libclang.dll!_Mtx_lock(_Mtx_internal_imp_t * * mtx=0x01b118e4) Line 153
C++
  libclang.dll!std::_Mtx_lockX(_Mtx_internal_imp_t * * _Mtx=0x01b118e4)
Line 68 C++
  libclang.dll!std::_Mutex_base::lock() Line 41 C++
  libclang.dll!llvm::sys::Mutex<0,1>::acquire() Line 94 C++
  libclang.dll!llvm::MutexGuard::MutexGuard(llvm::sys::MutexBase & m={...})
Line 33 C++
> libclang.dll!cleanupOnDiskMapAtExit() Line 124 C++
  libclang.dll!doexit(int code=0, int quick=0, int retcaller=1) Line 628 C
  libclang.dll!_cexit() Line 448 C
  libclang.dll!_CRT_INIT(void * hDllHandle=0x0f360000, unsigned long
dwReason=0, void * lpreserved=0x00000001) Line 169 C
  libclang.dll!__DllMainCRTStartup(void * hDllHandle=0x0f360000, unsigned
long dwReason=0, void * lpreserved=0x00000001) Line 399 C
  libclang.dll!_DllMainCRTStartup(void * hDllHandle=0x0f360000, unsigned
long dwReason=0, void * lpreserved=0x00000001) Line 340 C
  ntdll.dll!_LdrxCallInitRoutine at 16() Unknown
  ntdll.dll!LdrpCallInitRoutine() Unknown
  ntdll.dll!LdrShutdownProcess() Unknown
  ntdll.dll!RtlExitUserProcess() Unknown


And this is the mutex that is hung.  If I go debug inside the CRT, the
owning threadid is set to -1, so I'm not sure.  Maybe something's been
uninitialized by this point.  I thought of using ManagedStatic<> to better
control the uninitialization of the mutex, but I don't think that really
solves the problem.  The issue is that we're even relying on a mutex at all
during CRT shutdown.



On Thu, May 29, 2014 at 2:44 PM, Aaron Ballman <aaron at aaronballman.com>
wrote:

> On Thu, May 29, 2014 at 5:41 PM, Zachary Turner <zturner at google.com>
> wrote:
> > What command are you using to run the tests?  I'm still a new
> contributor,
> > and am not familiar with how to do everything, but I run ninja check-all
> and
> > while it doesn't seem to be finishing, I am not getting any output.  How
> can
> > I get a command line of a single test that I can easily run
> independently on
> > the command line to reproduce a deadlock so I can look into this further?
>
> I was running my tests from within MSVC by building the check-clang
> project; output pipes automatically into the output window as the
> tests run. You can use python and llvm-lit to run specific tests from
> the command line. Eg) python.exe ./bin/llvm-lit.py -v
> ../tools/clang/test/Sema/warn-thread-safety-analysis.c
>
> HTH!
>
> ~Aaron
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140529/5dd040cf/attachment.html>


More information about the llvm-commits mailing list