Index: third_party/tcmalloc/chromium/src/tests/malloc_hook_test.cc |
diff --git a/third_party/tcmalloc/chromium/src/tests/malloc_hook_test.cc b/third_party/tcmalloc/chromium/src/tests/malloc_hook_test.cc |
index dc65b68ae7640278d44f49a31571ee5104916954..cbf526a501feb3cf933b7e9ac0d7dd61f8ba4140 100644 |
--- a/third_party/tcmalloc/chromium/src/tests/malloc_hook_test.cc |
+++ b/third_party/tcmalloc/chromium/src/tests/malloc_hook_test.cc |
@@ -36,16 +36,25 @@ |
#ifdef HAVE_MMAP |
#include <sys/mman.h> |
#endif |
+#ifdef HAVE_UNISTD_H |
+#include <unistd.h> // for sleep() |
+#endif |
#include <algorithm> |
#include <string> |
#include <vector> |
-#include <google/malloc_hook.h> |
+#include <gperftools/malloc_hook.h> |
#include "malloc_hook-inl.h" |
#include "base/logging.h" |
-#include "base/spinlock.h" |
+#include "base/simple_mutex.h" |
#include "base/sysinfo.h" |
#include "tests/testutil.h" |
+// On systems (like freebsd) that don't define MAP_ANONYMOUS, use the old |
+// form of the name instead. |
+#ifndef MAP_ANONYMOUS |
+# define MAP_ANONYMOUS MAP_ANON |
+#endif |
+ |
namespace { |
using std::string; |
@@ -72,6 +81,15 @@ static int RUN_ALL_TESTS() { |
return 0; |
} |
+void Sleep(int seconds) { |
+#ifdef _MSC_VER |
+ _sleep(seconds * 1000); // Windows's _sleep takes milliseconds argument |
+#else |
+ sleep(seconds); |
+#endif |
+} |
+ |
+using std::min; |
using base::internal::kHookListMaxValues; |
// Since HookList is a template and is defined in malloc_hook.cc, we can only |
@@ -81,7 +99,7 @@ typedef base::internal::HookList<MallocHook::NewHook> TestHookList; |
int TestHookList_Traverse(const TestHookList& list, int* output_array, int n) { |
MallocHook::NewHook values_as_hooks[kHookListMaxValues]; |
- int result = list.Traverse(values_as_hooks, std::min(n, kHookListMaxValues)); |
+ int result = list.Traverse(values_as_hooks, min(n, kHookListMaxValues)); |
for (int i = 0; i < result; ++i) { |
output_array[i] = reinterpret_cast<const int&>(values_as_hooks[i]); |
} |
@@ -229,12 +247,12 @@ void MultithreadedTestThread(TestHookList* list, int shift, |
static volatile int num_threads_remaining; |
static TestHookList list = INIT_HOOK_LIST(69); |
-static SpinLock threadcount_lock; |
+static Mutex threadcount_lock; |
void MultithreadedTestThreadRunner(int thread_num) { |
// Wait for all threads to start running. |
{ |
- SpinLockHolder h(&threadcount_lock); |
+ MutexLock ml(&threadcount_lock); |
assert(num_threads_remaining > 0); |
--num_threads_remaining; |
@@ -242,7 +260,7 @@ void MultithreadedTestThreadRunner(int thread_num) { |
// go simple and busy-wait. |
while (num_threads_remaining > 0) { |
threadcount_lock.Unlock(); |
- SleepForMilliseconds(100); |
+ Sleep(1); |
threadcount_lock.Lock(); |
} |
} |
@@ -271,7 +289,10 @@ TEST(HookListTest, MultithreadedTest) { |
EXPECT_EQ(0, list.priv_end); |
} |
-#ifdef HAVE_MMAP |
+// We only do mmap-hooking on (some) linux systems. |
+#if defined(HAVE_MMAP) && defined(__linux) && \ |
+ (defined(__i386__) || defined(__x86_64__) || defined(__PPC__)) |
+ |
int mmap_calls = 0; |
int mmap_matching_calls = 0; |
int munmap_calls = 0; |
@@ -336,7 +357,7 @@ TEST(MallocMookTest, MmapReplacements) { |
// whoever owns that memory now. |
// EXPECT_DEATH(*ptr = 'a', "SIGSEGV"); |
} |
-#endif // #ifdef HAVE_MMAN |
+#endif // #ifdef HAVE_MMAP && linux && ... |
} // namespace |