diff options
Diffstat (limited to 'standalone/tests/tsd_test.cpp')
-rw-r--r-- | standalone/tests/tsd_test.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/standalone/tests/tsd_test.cpp b/standalone/tests/tsd_test.cpp index 58ac9e74b98..17387ee7c57 100644 --- a/standalone/tests/tsd_test.cpp +++ b/standalone/tests/tsd_test.cpp @@ -11,6 +11,8 @@ #include "tsd_exclusive.h" #include "tsd_shared.h" +#include <stdlib.h> + #include <condition_variable> #include <mutex> #include <set> @@ -26,23 +28,29 @@ public: using CacheT = struct MockCache { volatile scudo::uptr Canary; }; using QuarantineCacheT = struct MockQuarantine {}; - void initLinkerInitialized() { + void init() { // This should only be called once by the registry. EXPECT_FALSE(Initialized); Initialized = true; } - void reset() { memset(this, 0, sizeof(*this)); } - void unmapTestOnly() { TSDRegistry.unmapTestOnly(); } - void initCache(CacheT *Cache) { memset(Cache, 0, sizeof(*Cache)); } + void unmapTestOnly() { TSDRegistry.unmapTestOnly(this); } + void initCache(CacheT *Cache) { *Cache = {}; } void commitBack(scudo::TSD<MockAllocator> *TSD) {} TSDRegistryT *getTSDRegistry() { return &TSDRegistry; } void callPostInitCallback() {} bool isInitialized() { return Initialized; } + void *operator new(size_t Size) { + void *P = nullptr; + EXPECT_EQ(0, posix_memalign(&P, alignof(ThisT), Size)); + return P; + } + void operator delete(void *P) { free(P); } + private: - bool Initialized; + bool Initialized = false; TSDRegistryT TSDRegistry; }; @@ -69,11 +77,10 @@ TEST(ScudoTSDTest, TSDRegistryInit) { }; std::unique_ptr<AllocatorT, decltype(Deleter)> Allocator(new AllocatorT, Deleter); - Allocator->reset(); EXPECT_FALSE(Allocator->isInitialized()); auto Registry = Allocator->getTSDRegistry(); - Registry->initLinkerInitialized(Allocator.get()); + Registry->init(Allocator.get()); EXPECT_TRUE(Allocator->isInitialized()); } @@ -84,7 +91,6 @@ template <class AllocatorT> static void testRegistry() { }; std::unique_ptr<AllocatorT, decltype(Deleter)> Allocator(new AllocatorT, Deleter); - Allocator->reset(); EXPECT_FALSE(Allocator->isInitialized()); auto Registry = Allocator->getTSDRegistry(); @@ -153,7 +159,6 @@ template <class AllocatorT> static void testRegistryThreaded() { }; std::unique_ptr<AllocatorT, decltype(Deleter)> Allocator(new AllocatorT, Deleter); - Allocator->reset(); std::thread Threads[32]; for (scudo::uptr I = 0; I < ARRAY_SIZE(Threads); I++) Threads[I] = std::thread(stressCache<AllocatorT>, Allocator.get()); @@ -209,7 +214,6 @@ TEST(ScudoTSDTest, TSDRegistryTSDsCount) { }; std::unique_ptr<AllocatorT, decltype(Deleter)> Allocator(new AllocatorT, Deleter); - Allocator->reset(); // We attempt to use as many TSDs as the shared cache offers by creating a // decent amount of threads that will be run concurrently and attempt to get // and lock TSDs. We put them all in a set and count the number of entries |