diff options
author | igorbalduev <igorbalduev@yandex-team.com> | 2023-12-06 22:36:35 +0300 |
---|---|---|
committer | igorbalduev <igorbalduev@yandex-team.com> | 2023-12-07 00:10:15 +0300 |
commit | e0419f0f4d03f87749ac004ded90a9a3604455e3 (patch) | |
tree | 6e97a2ded581b899ec59002c42b19c39e0f196a0 /library/cpp/dwarf_backtrace/backtrace.h | |
parent | 50525833ed09067aa2f03551c08a54f7a839c2b7 (diff) | |
download | ydb-e0419f0f4d03f87749ac004ded90a9a3604455e3.tar.gz |
Support for single-threaded backtrace_state
Обнаружилось, что при использовании *libbacktrace* в многопоточном режиме приложение течёт по памяти. Пофиксили утечки мьютексом, но т.к. теперь *libbacktrace* в нашем коде фактически используется в один поток, имеет смысл использовать его с соответствующими опциями в `backtrace_state`.
Добавил сбоку к существующему коду `unsafe`-версию `ResolveBacktrace`.
Diffstat (limited to 'library/cpp/dwarf_backtrace/backtrace.h')
-rw-r--r-- | library/cpp/dwarf_backtrace/backtrace.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/library/cpp/dwarf_backtrace/backtrace.h b/library/cpp/dwarf_backtrace/backtrace.h index 62ec36dba5..eeda4d40d9 100644 --- a/library/cpp/dwarf_backtrace/backtrace.h +++ b/library/cpp/dwarf_backtrace/backtrace.h @@ -33,4 +33,10 @@ namespace NDwarf { // Stops execution if the callback returns `EResolving::Break`. [[nodiscard]] TMaybe<TError> ResolveBacktrace(TArrayRef<const void* const> backtrace, TCallback callback); + // Same as `ResolveBacktrace` but uses a separate single-threaded `backtrace_state` protected by a static mutex. + // + // libbacktrace may leak memory when used concurrently even with the `threaded` option set to 1, + // which is explicitly stated in its source code (contrib/libs/backtrace/dwarf.c:dwarf_lookup_pc, + // contrib/libs/backtrace/fileline.c:fileline_initialize) and confirmed in MAPSBKOFCT-1959. + [[nodiscard]] TMaybe<TError> ResolveBacktraceLocked(TArrayRef<const void* const> backtrace, TCallback callback); } |