Warn about practically unfixable TSAN warnings in stack trace (#7723)
Summary: TSAN reports that our stack trace handler makes unsafe calls during a signal handler. I just tried fixing some of them and I don't think it's fixable unless we can get away from using FILE stdio. Even if we can use lower level functions only, I'm not sure it's fixed. I also tried suppressing the reports with function and file level TSAN suppression, but that doesn't seem to work, perhaps because the violation is reported on the callee, not the caller. So I added a warning to be printed whenever these violations would be reported that they are practically ignorable. Internal ref: T77844138 Pull Request resolved: https://github.com/facebook/rocksdb/pull/7723 Test Plan: run external_sst_file_test with seeded abort(), with TSAN (TSAN warnings + new warning) and without TSAN (no warning, just stack trace). Reviewed By: akankshamahajan15 Differential Revision: D25228011 Pulled By: pdillinger fbshipit-source-id: 3eda1d6e7ca3cdc64076cf99ae954168837d2818
This commit is contained in:
parent
eb65d673fe
commit
0b06af9146
@ -144,6 +144,22 @@ static void StackTraceHandler(int sig) {
|
||||
fprintf(stderr, "Received signal %d (%s)\n", sig, strsignal(sig));
|
||||
// skip the top three signal handler related frames
|
||||
PrintStack(3);
|
||||
|
||||
// Efforts to fix or suppress TSAN warnings "signal-unsafe call inside of
|
||||
// a signal" have failed, so just warn the user about them.
|
||||
#if defined(__clang__) && defined(__has_feature)
|
||||
#if __has_feature(thread_sanitizer)
|
||||
fprintf(stderr,
|
||||
"==> NOTE: any above warnings about \"signal-unsafe call\" are\n"
|
||||
"==> ignorable, as they are expected when generating a stack\n"
|
||||
"==> trace because of a signal under TSAN. Consider why the\n"
|
||||
"==> signal was generated to begin with, and the stack trace\n"
|
||||
"==> in the TSAN warning can be useful for that. (The stack\n"
|
||||
"==> trace printed by the signal handler is likely obscured\n"
|
||||
"==> by TSAN output.)\n");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// re-signal to default handler (so we still get core dump if needed...)
|
||||
raise(sig);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user