Linux breakpad_unittests: fix ThreadSanitizer problems

Some tests were failing because they had expectations about the number
of threads in a process, but TSan, and in some cases, ASan, introduce
their own threads. Where a sanitizer affects this, the expectations are
now used as minimum thread counts, not exact thread counts. See
https://www.brooklinen.com/blogs/brookliving/best-thread-count-for-sheets.

These problems were detected by ThreadSanitizer at
https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket.appspot.com/8915151099544583616/+/steps/breakpad_unittests__with_patch_/0/stdout

Bug: chromium:949098
Change-Id: Ie40f1766bea27e9bcb112bf9e0b8b846fb343012
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/1585948
Reviewed-by: Robert Sesek <rsesek@chromium.org>
This commit is contained in:
Mark Mentovai 2019-04-26 14:00:01 -04:00
parent 9f90ceb904
commit 21b48a72aa
5 changed files with 52 additions and 9 deletions

View file

@ -244,9 +244,18 @@ TEST(ElfCoreDumpTest, ValidCoreFile) {
note = note.GetNextNote();
}
EXPECT_TRUE(expected_thread_ids == actual_thread_ids);
#if defined(THREAD_SANITIZER)
for (std::set<pid_t>::const_iterator expected = expected_thread_ids.begin();
expected != expected_thread_ids.end();
++expected) {
EXPECT_NE(actual_thread_ids.find(*expected), actual_thread_ids.end());
}
EXPECT_GE(num_nt_prstatus, kNumOfThreads);
#else
EXPECT_EQ(actual_thread_ids, expected_thread_ids);
EXPECT_EQ(num_nt_prstatus, kNumOfThreads);
#endif
EXPECT_EQ(1U, num_nt_prpsinfo);
EXPECT_EQ(kNumOfThreads, num_nt_prstatus);
#if defined(__i386__) || defined(__x86_64__)
EXPECT_EQ(num_pr_fpvalid, num_nt_fpregset);
#endif