llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-compiler-rt-sanitizer Author: Vitaly Buka (vitalybuka) <details> <summary>Changes</summary> Check IsFiredSuppression(ctx, ReportTypeErrnoInSignal, stack) and return early before constructing ScopedReport in ReportErrnoSpoiling (matching SignalUnsafeCall and ReportRace). This avoids acquiring ScopedErrorReportLock and ThreadRegistryLock for already-suppressed reports. Assisted-by: Gemini --- Full diff: https://github.com/llvm/llvm-project/pull/228811.diff 1 Files Affected: - (modified) compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp (+4-6) ``````````diff diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp b/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp index 233985c419be1..4c0c39bb6cc82 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp @@ -2176,19 +2176,17 @@ static void ReportErrnoSpoiling(ThreadState *thr, uptr pc, int sig) { // StackTrace::GetNestInstructionPc(pc) is used because return address is // expected, OutputReport() will undo this. ObtainCurrentStack(thr, StackTrace::GetNextInstructionPc(pc), &stack); + if (IsFiredSuppression(ctx, ReportTypeErrnoInSignal, stack)) + return; ScopedReport rep(ReportTypeErrnoInSignal); - bool suppressed; // Release locks before symbolizing and outputting the report to avoid // deadlocks. { ThreadRegistryLock l(&ctx->thread_registry); rep.SetSigNum(sig); - suppressed = IsFiredSuppression(ctx, ReportTypeErrnoInSignal, stack); - if (!suppressed) - rep.AddStack(stack, true); + rep.AddStack(stack, true); } - if (!suppressed) - OutputReport(thr, rep); + OutputReport(thr, rep); } static void CallUserSignalHandler(ThreadState *thr, bool sync, bool acquire, `````````` </details> https://github.com/llvm/llvm-project/pull/228811 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
