aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/dwarf_backtrace/backtrace.h
diff options
context:
space:
mode:
authorigorbalduev <igorbalduev@yandex-team.com>2023-12-06 22:36:35 +0300
committerigorbalduev <igorbalduev@yandex-team.com>2023-12-07 00:10:15 +0300
commite0419f0f4d03f87749ac004ded90a9a3604455e3 (patch)
tree6e97a2ded581b899ec59002c42b19c39e0f196a0 /library/cpp/dwarf_backtrace/backtrace.h
parent50525833ed09067aa2f03551c08a54f7a839c2b7 (diff)
downloadydb-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.h6
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);
}