forked from weaselab/conflict-set
Add valgrind annotations
This appears to affect the binary (how else could it possibly work??), but the microbenchmarks don't show a difference
This commit is contained in:
+19
-2
@@ -36,6 +36,11 @@ limitations under the License.
|
|||||||
#include <arm_neon.h>
|
#include <arm_neon.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __has_include(<valgrind/memcheck.h>)
|
||||||
|
#define MEMCHECK
|
||||||
|
#include <valgrind/memcheck.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// ==================== BEGIN IMPLEMENTATION ====================
|
// ==================== BEGIN IMPLEMENTATION ====================
|
||||||
|
|
||||||
struct Entry {
|
struct Entry {
|
||||||
@@ -53,10 +58,16 @@ struct BoundedFreeListAllocator {
|
|||||||
return new (safe_malloc(sizeof(T))) T;
|
return new (safe_malloc(sizeof(T))) T;
|
||||||
}
|
}
|
||||||
assert(freeList != nullptr);
|
assert(freeList != nullptr);
|
||||||
void *result = freeList;
|
void *buffer = freeList;
|
||||||
|
#ifdef MEMCHECK
|
||||||
|
VALGRIND_MAKE_MEM_DEFINED(freeList, sizeof(freeList));
|
||||||
|
#endif
|
||||||
memcpy(&freeList, freeList, sizeof(freeList));
|
memcpy(&freeList, freeList, sizeof(freeList));
|
||||||
--freeListSize;
|
--freeListSize;
|
||||||
return new (result) T;
|
#ifdef MEMCHECK
|
||||||
|
VALGRIND_MAKE_MEM_UNDEFINED(buffer, sizeof(T));
|
||||||
|
#endif
|
||||||
|
return new (buffer) T;
|
||||||
}
|
}
|
||||||
|
|
||||||
void release(T *p) {
|
void release(T *p) {
|
||||||
@@ -67,10 +78,16 @@ struct BoundedFreeListAllocator {
|
|||||||
memcpy((void *)p, &freeList, sizeof(freeList));
|
memcpy((void *)p, &freeList, sizeof(freeList));
|
||||||
freeList = p;
|
freeList = p;
|
||||||
++freeListSize;
|
++freeListSize;
|
||||||
|
#ifdef MEMCHECK
|
||||||
|
VALGRIND_MAKE_MEM_NOACCESS(p, sizeof(T));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
~BoundedFreeListAllocator() {
|
~BoundedFreeListAllocator() {
|
||||||
for (void *iter = freeList; iter != nullptr;) {
|
for (void *iter = freeList; iter != nullptr;) {
|
||||||
|
#ifdef MEMCHECK
|
||||||
|
VALGRIND_MAKE_MEM_DEFINED(iter, sizeof(iter));
|
||||||
|
#endif
|
||||||
auto *tmp = iter;
|
auto *tmp = iter;
|
||||||
memcpy(&iter, iter, sizeof(void *));
|
memcpy(&iter, iter, sizeof(void *));
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
|||||||
Reference in New Issue
Block a user