[TSan] use InternalMmapVector to store fired suppressions
authorAlexey Samsonov <samsonov@google.com>
Fri, 14 Jun 2013 11:18:58 +0000 (11:18 +0000)
committerAlexey Samsonov <samsonov@google.com>
Fri, 14 Jun 2013 11:18:58 +0000 (11:18 +0000)
llvm-svn: 183974

compiler-rt/lib/tsan/rtl/tsan_rtl.cc
compiler-rt/lib/tsan/rtl/tsan_rtl.h
compiler-rt/lib/tsan/rtl/tsan_rtl_report.cc

index 5ad40234b6e2dbecfdd38925fba7573e5544f3a2..820a6eeb9b29b561d06a9a1b7992bf0d25e7c689 100644 (file)
@@ -74,7 +74,7 @@ Context::Context()
       CreateThreadContext, kMaxTid, kThreadQuarantineSize))
   , racy_stacks(MBlockRacyStacks)
   , racy_addresses(MBlockRacyAddresses)
-  , fired_suppressions(MBlockRacyAddresses) {
+  , fired_suppressions(8) {
 }
 
 // The objects are allocated in TLS, so one may rely on zero-initialization.
index 8e2b8b6651de240df6c1d448e7ffe7683d8a73da..849389b7207ed1b66aa8ead2fd00828f5e235a81 100644 (file)
@@ -533,7 +533,8 @@ struct Context {
 
   Vector<RacyStacks> racy_stacks;
   Vector<RacyAddress> racy_addresses;
-  Vector<FiredSuppression> fired_suppressions;
+  // Number of fired suppressions may be large enough.
+  InternalMmapVector<FiredSuppression> fired_suppressions;
 
   Flags flags;
 
index 61260449a06f800f6b5880ccb8f92299f50d158d..63435cf6494eafc7804fd04db3bcdabc1ed91223 100644 (file)
@@ -514,7 +514,7 @@ bool OutputReport(Context *ctx,
     suppress_pc = IsSuppressed(rep->typ, suppress_loc, &supp);
   if (suppress_pc != 0) {
     FiredSuppression s = {srep.GetReport()->typ, suppress_pc, supp};
-    ctx->fired_suppressions.PushBack(s);
+    ctx->fired_suppressions.push_back(s);
   }
   if (OnReport(rep, suppress_pc != 0))
     return false;
@@ -526,7 +526,7 @@ bool OutputReport(Context *ctx,
 bool IsFiredSuppression(Context *ctx,
                         const ScopedReport &srep,
                         const StackTrace &trace) {
-  for (uptr k = 0; k < ctx->fired_suppressions.Size(); k++) {
+  for (uptr k = 0; k < ctx->fired_suppressions.size(); k++) {
     if (ctx->fired_suppressions[k].type != srep.GetReport()->typ)
       continue;
     for (uptr j = 0; j < trace.Size(); j++) {
@@ -544,7 +544,7 @@ bool IsFiredSuppression(Context *ctx,
 static bool IsFiredSuppression(Context *ctx,
                                const ScopedReport &srep,
                                uptr addr) {
-  for (uptr k = 0; k < ctx->fired_suppressions.Size(); k++) {
+  for (uptr k = 0; k < ctx->fired_suppressions.size(); k++) {
     if (ctx->fired_suppressions[k].type != srep.GetReport()->typ)
       continue;
     FiredSuppression *s = &ctx->fired_suppressions[k];
@@ -589,7 +589,7 @@ static bool IsJavaNonsense(const ReportDesc *rep) {
           && frame->module == 0)) {
         if (frame) {
           FiredSuppression supp = {rep->typ, frame->pc, 0};
-          CTX()->fired_suppressions.PushBack(supp);
+          CTX()->fired_suppressions.push_back(supp);
         }
         return true;
       }