diff options
author | Andres Noetzli <andres.noetzli@gmail.com> | 2018-02-08 18:36:12 -0800 |
---|---|---|
committer | Aina Niemetz <aina.niemetz@gmail.com> | 2018-02-08 18:36:12 -0800 |
commit | 83f150c727f197c530d6f46a75b516eea52bed29 (patch) | |
tree | 8c13925a1c572a7fce2c0f29b5c9b983bdcf6d92 /src/context | |
parent | 48d03da729c615114eae0e10d579ab5a58adec81 (diff) |
Replace CMM flag with debug CMM flag, fix leak in debug CMM (#1586)
Previously, we had -DCVC4_CONTEXT_MEMORY_MANAGER that needed to be added as a compile flag
to use the context memory manager (which we want by default). This makes compiling with
other build systems cumbersome because you have to know about the flag.
This commit replaces the -DCVC4_CONTEXT_MEMORY_MANAGER flag with a -DCVC4_DEBUG_CONTEXT_MEMORY_MANAGER
flag that does the opposite (in absence of the flag, we use the context memory manager).
Additionally, the commit fixes a memory leak in the debug context memory manager (the
destructor did not clean up the allocations).
Diffstat (limited to 'src/context')
-rw-r--r-- | src/context/context_mm.cpp | 4 | ||||
-rw-r--r-- | src/context/context_mm.h | 21 |
2 files changed, 19 insertions, 6 deletions
diff --git a/src/context/context_mm.cpp b/src/context/context_mm.cpp index a36d523f7..bbaf606ec 100644 --- a/src/context/context_mm.cpp +++ b/src/context/context_mm.cpp @@ -31,7 +31,7 @@ namespace CVC4 { namespace context { -#ifdef CVC4_CONTEXT_MEMORY_MANAGER +#ifndef CVC4_DEBUG_CONTEXT_MEMORY_MANAGER void ContextMemoryManager::newChunk() { @@ -168,7 +168,7 @@ void ContextMemoryManager::pop() { } } -#endif /* CVC4_CONTEXT_MEMORY_MANAGER */ +#endif /* CVC4_DEBUG_CONTEXT_MEMORY_MANAGER */ } /* CVC4::context namespace */ } /* CVC4 namespace */ diff --git a/src/context/context_mm.h b/src/context/context_mm.h index b7e5ec119..3607d97c3 100644 --- a/src/context/context_mm.h +++ b/src/context/context_mm.h @@ -27,7 +27,7 @@ namespace CVC4 { namespace context { -#ifdef CVC4_CONTEXT_MEMORY_MANAGER +#ifndef CVC4_DEBUG_CONTEXT_MEMORY_MANAGER /** * Region-based memory manager for contexts. Calls to newData provide memory @@ -148,11 +148,14 @@ class ContextMemoryManager { };/* class ContextMemoryManager */ -#else /* CVC4_CONTEXT_MEMORY_MANAGER */ +#else /* CVC4_DEBUG_CONTEXT_MEMORY_MANAGER */ + +#warning \ + "Using the debug version of ContextMemoryManager, expect performance degradation" /** * Dummy implementation of the ContextMemoryManager for debugging purposes. Use - * the configure flag "--disable-context-memory-manager" to use this + * the configure flag "--enable-debug-context-memory-manager" to use this * implementation. */ class ContextMemoryManager @@ -164,6 +167,16 @@ class ContextMemoryManager } ContextMemoryManager() { d_allocations.push_back(std::vector<char*>()); } + ~ContextMemoryManager() + { + for (const auto& levelAllocs : d_allocations) + { + for (auto alloc : levelAllocs) + { + free(alloc); + } + } + } void* newData(size_t size) { @@ -187,7 +200,7 @@ class ContextMemoryManager std::vector<std::vector<char*>> d_allocations; }; /* ContextMemoryManager */ -#endif /* CVC4_CONTEXT_MEMORY_MANAGER */ +#endif /* CVC4_DEBUG_CONTEXT_MEMORY_MANAGER */ /** * An STL-like allocator class for allocating from context memory. |