llvm-project/clang/tools
Balazs Benics d919d027ba [scan-build] Fix deadlock at failures in libears/ear.c
We experienced some deadlocks when we used multiple threads for logging
using `scan-builds` intercept-build tool when we used multiple threads by
e.g. logging `make -j16`

```
(gdb) bt
#0  0x00007f2bb3aff110 in __lll_lock_wait () from /lib/x86_64-linux-gnu/libpthread.so.0
#1  0x00007f2bb3af70a3 in pthread_mutex_lock () from /lib/x86_64-linux-gnu/libpthread.so.0
#2  0x00007f2bb3d152e4 in ?? ()
#3  0x00007ffcc5f0cc80 in ?? ()
#4  0x00007f2bb3d2bf5b in ?? () from /lib64/ld-linux-x86-64.so.2
#5  0x00007f2bb3b5da27 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#6  0x00007f2bb3b5dbe0 in exit () from /lib/x86_64-linux-gnu/libc.so.6
#7  0x00007f2bb3d144ee in ?? ()
#8  0x746e692f706d742f in ?? ()
#9  0x692d747065637265 in ?? ()
#10 0x2f653631326b3034 in ?? ()
#11 0x646d632e35353532 in ?? ()
#12 0x0000000000000000 in ?? ()
```

I think the gcc's exit call caused the injected `libear.so` to be unloaded
by the `ld`, which in turn called the `void on_unload() __attribute__((destructor))`.
That tried to acquire an already locked mutex which was left locked in the
`bear_report_call()` call, that probably encountered some error and
returned early when it forgot to unlock the mutex.

All of these are speculation since from the backtrace I could not verify
if frames 2 and 3 are in fact corresponding to the `libear.so` module.
But I think it's a fairly safe bet.

So, hereby I'm releasing the held mutex on *all paths*, even if some failure
happens.

PS: I would use lock_guards, but it's C.

Reviewed-by: NoQ

Differential Revision: https://reviews.llvm.org/D118439
2022-02-02 12:55:44 +01:00
..
amdgpu-arch [amdgpu-arch] Guard hsa.h with __has_include 2021-05-10 07:33:30 +00:00
apinotes-test [Support] Don't include VirtualFileSystem.h in CommandLine.h 2021-04-21 10:19:01 -04:00
arcmt-test [NFC] Reordering parameters in getFile and getFileOrSTDIN 2021-03-25 09:47:49 -04:00
c-arcmt-test
c-index-test [clang][cmake] Use `GNUInstallDirs` to support custom installation dirs 2022-01-21 23:58:08 +00:00
clang-check [clang-check] Adjust argument adjusters for clang-check to strip options blocking the static analyzer 2022-01-14 10:05:47 +01:00
clang-diff clang-{tools,unittests}: Stop using SourceManager::getBuffer, NFC 2020-10-15 00:35:16 -04:00
clang-extdef-mapping [clang-tooling] Prevent llvm::fatal_error on invalid CLI option 2021-01-29 10:15:06 +01:00
clang-format [clang][cmake] Use `GNUInstallDirs` to support custom installation dirs 2022-01-21 23:58:08 +00:00
clang-format-vs clang-format-vs : Fix Unicode formatting 2019-11-27 09:58:59 +01:00
clang-fuzzer Remove redundant return and continue statements (NFC) 2021-12-24 23:17:54 -08:00
clang-import-test Reland "[clang-repl] Implement partial translation units and error recovery." 2021-07-12 15:21:22 +00:00
clang-linker-wrapper [OpenMP] Remove call to 'clang-offload-wrapper' binary 2022-01-31 23:11:43 -05:00
clang-nvlink-wrapper [clang][cmake] Use `GNUInstallDirs` to support custom installation dirs 2022-01-21 23:58:08 +00:00
clang-offload-bundler [clang] Remove redundant member initialization (NFC) 2022-01-02 10:20:23 -08:00
clang-offload-wrapper [clang-offload-wrapper] Disabled ELF offload notes embedding by default. 2021-08-18 08:18:03 -07:00
clang-refactor Use ManagedStatic and lazy initialization of cl::opt in libSupport to make it free of global initializer 2021-07-16 07:38:16 +00:00
clang-rename [clang][cmake] Use `GNUInstallDirs` to support custom installation dirs 2022-01-21 23:58:08 +00:00
clang-repl Reland "[clang-repl] Allow loading of plugins in clang-repl." 2021-10-05 13:04:01 +00:00
clang-scan-deps Retire llvm::make_reverse_iterator in favor of std::make_reverse_iterator 2022-01-05 14:07:08 +01:00
clang-shlib [CMake] Don't use -Bsymbolic-functions for MinGW targets 2021-06-30 22:54:26 +03:00
diag-build [clang] Use portable "#!/usr/bin/env bash" shebang for tools and utils. 2021-09-23 21:16:43 +05:30
diagtool Move STLFunctionalExtras out of STLExtras 2022-01-24 14:13:21 +01:00
driver [cc1as] Remove -Wa,--compress-debug-sections=zlib-gnu 2022-01-26 13:28:51 -08:00
libclang [clang][cmake] Use `GNUInstallDirs` to support custom installation dirs 2022-01-21 23:58:08 +00:00
scan-build [clang][cmake] Use `GNUInstallDirs` to support custom installation dirs 2022-01-21 23:58:08 +00:00
scan-build-py [scan-build] Fix deadlock at failures in libears/ear.c 2022-02-02 12:55:44 +01:00
scan-view [clang][cmake] Use `GNUInstallDirs` to support custom installation dirs 2022-01-21 23:58:08 +00:00
CMakeLists.txt [Clang] Introduce Clang Linker Wrapper Tool 2022-01-31 15:56:04 -05:00