Ticket #2808: valgrind_mempool.diff
File valgrind_mempool.diff, 1.4 KB (added by , 10 years ago) |
---|
-
source/lib/allocators/dynarray.cpp
30 30 #include "lib/alignment.h" 31 31 #include "lib/sysdep/vm.h" 32 32 33 #include "valgrind.h" 33 34 34 35 static Status validate_da(DynArray* da) 35 36 { … … 73 74 da->cur_size_pa = 0; 74 75 da->pos = 0; 75 76 CHECK_DA(da); 77 78 VALGRIND_CREATE_MEMPOOL(da, 0, 0); 79 76 80 return INFO::OK; 77 81 } 78 82 … … 86 90 // wipe out the DynArray for safety 87 91 memset(da, 0, sizeof(*da)); 88 92 93 if (da->cur_size_pa) 94 VALGRIND_MEMPOOL_FREE(da, da->base); 95 VALGRIND_DESTROY_MEMPOOL(da); 96 89 97 return INFO::OK; 90 98 } 91 99 … … 113 121 ok = vm::Commit(uintptr_t(end), size_delta_pa); 114 122 if(!ok) 115 123 debug_printf(L"Commit failed (%p %lld)\n", end, (long long)size_delta_pa); 124 125 if(cur_size_pa == 0) 126 VALGRIND_MEMPOOL_ALLOC(da, da->base, new_size_pa); 127 else 128 VALGRIND_MEMPOOL_CHANGE(da, da->base, da->base, new_size_pa); 116 129 } 117 130 // shrinking 118 131 else if(size_delta_pa < 0) 132 { 119 133 ok = vm::Decommit(uintptr_t(end+size_delta_pa), -size_delta_pa); 134 if(new_size_pa) 135 VALGRIND_MEMPOOL_TRIM(da, da->base, new_size_pa); 136 else 137 VALGRIND_MEMPOOL_FREE(da, da->base); 138 } 120 139 // else: no change in page count, e.g. if going from size=1 to 2 121 140 // (we don't want mem_* to have to handle size=0) 122 141