[llvm-commits] [compiler-rt] r170206 - /compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_allocator_test.cc

Kostya Serebryany kcc at google.com
Fri Dec 14 06:20:29 PST 2012


Author: kcc
Date: Fri Dec 14 08:20:29 2012
New Revision: 170206

URL: http://llvm.org/viewvc/llvm-project?rev=170206&view=rev
Log:
[sanitizer] add AllocatorLeakTest

Modified:
    compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_allocator_test.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_allocator_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_allocator_test.cc?rev=170206&r1=170205&r2=170206&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_allocator_test.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_allocator_test.cc Fri Dec 14 08:20:29 2012
@@ -17,6 +17,7 @@
 #include "gtest/gtest.h"
 
 #include <stdlib.h>
+#include <pthread.h>
 #include <algorithm>
 #include <vector>
 
@@ -430,6 +431,36 @@
       SizeClassAllocatorLocalCache<Allocator32Compact> >();
 }
 
+#if SANITIZER_WORDSIZE == 64
+typedef SizeClassAllocatorLocalCache<Allocator64> AllocatorCache;
+static THREADLOCAL AllocatorCache static_allocator_cache;
+
+void *AllocatorLeakTestWorker(void *arg) {
+  typedef AllocatorCache::Allocator Allocator;
+  Allocator *a = (Allocator*)(arg);
+  static_allocator_cache.Allocate(a, 10);
+  static_allocator_cache.Drain(a);
+  return 0;
+}
+
+TEST(SanitizerCommon, AllocatorLeakTest) {
+  typedef typename AllocatorCache::Allocator Allocator;
+  Allocator a;
+  a.Init();
+  uptr total_used_memory = 0;
+  for (int i = 0; i < 100; i++) {
+    pthread_t t;
+    EXPECT_EQ(0, pthread_create(&t, 0, AllocatorLeakTestWorker, &a));
+    EXPECT_EQ(0, pthread_join(t, 0));
+    if (i == 0)
+      total_used_memory = a.TotalMemoryUsed();
+    EXPECT_EQ(a.TotalMemoryUsed(), total_used_memory);
+  }
+
+  a.TestOnlyUnmap();
+}
+#endif
+
 TEST(Allocator, Basic) {
   char *p = (char*)InternalAlloc(10);
   EXPECT_NE(p, (char*)0);





More information about the llvm-commits mailing list