[compiler-rt] r291510 - Bypass quarantine when quarantine size is set ot zero.

Alex Shlyapnikov via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 9 15:49:15 PST 2017


Author: alekseyshl
Date: Mon Jan  9 17:49:15 2017
New Revision: 291510

URL: http://llvm.org/viewvc/llvm-project?rev=291510&view=rev
Log:
Bypass quarantine when quarantine size is set ot zero.

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_quarantine.h

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_quarantine.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_quarantine.h?rev=291510&r1=291509&r2=291510&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_quarantine.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_quarantine.h Mon Jan  9 17:49:15 2017
@@ -49,6 +49,10 @@ class Quarantine {
   }
 
   void Init(uptr size, uptr cache_size) {
+    // Thread local quarantine size can be zero only when global quarantine size
+    // is zero (it allows us to perform just one atomic read per Put() call).
+    CHECK((size == 0 && cache_size == 0) || cache_size != 0);
+
     atomic_store(&max_size_, size, memory_order_relaxed);
     atomic_store(&min_size_, size / 10 * 9,
                  memory_order_relaxed);  // 90% of max size.
@@ -61,8 +65,15 @@ class Quarantine {
   }
 
   void Put(Cache *c, Callback cb, Node *ptr, uptr size) {
-    c->Enqueue(cb, ptr, size);
-    if (c->Size() > GetCacheSize())
+    uptr cache_size = GetCacheSize();
+    if (cache_size) {
+      c->Enqueue(cb, ptr, size);
+    } else {
+      // cache_size == 0 only when size == 0 (see Init).
+      cb.Recycle(ptr);
+    }
+    // Check cache size anyway to accommodate for runtime cache_size change.
+    if (c->Size() > cache_size)
       Drain(c, cb);
   }
 
@@ -207,6 +218,7 @@ class QuarantineCache {
     return b;
   }
 };
+
 } // namespace __sanitizer
 
 #endif // SANITIZER_QUARANTINE_H




More information about the llvm-commits mailing list