Ticket #2808: valgrind_mempool.diff

File valgrind_mempool.diff, 1.4 KB (added by leper, 10 years ago)

wip, still some remaining issues, but a lot cleaner output

  • source/lib/allocators/dynarray.cpp

     
    3030#include "lib/alignment.h"
    3131#include "lib/sysdep/vm.h"
    3232
     33#include "valgrind.h"
    3334
    3435static Status validate_da(DynArray* da)
    3536{
     
    7374    da->cur_size_pa = 0;
    7475    da->pos         = 0;
    7576    CHECK_DA(da);
     77
     78    VALGRIND_CREATE_MEMPOOL(da, 0, 0);
     79
    7680    return INFO::OK;
    7781}
    7882
     
    8690    // wipe out the DynArray for safety
    8791    memset(da, 0, sizeof(*da));
    8892
     93    if (da->cur_size_pa)
     94        VALGRIND_MEMPOOL_FREE(da, da->base);
     95    VALGRIND_DESTROY_MEMPOOL(da);
     96
    8997    return INFO::OK;
    9098}
    9199
     
    113121        ok = vm::Commit(uintptr_t(end), size_delta_pa);
    114122        if(!ok)
    115123            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);
    116129    }
    117130    // shrinking
    118131    else if(size_delta_pa < 0)
     132    {
    119133        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    }
    120139    // else: no change in page count, e.g. if going from size=1 to 2
    121140    // (we don't want mem_* to have to handle size=0)
    122141