diff options
author | Sverker Eriksson <[email protected]> | 2011-11-17 15:44:37 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2011-11-17 15:44:37 +0100 |
commit | 40790b549f870b61828e7590977faf827abd3a01 (patch) | |
tree | 9071f22850af53cb053793cd2f3c1b8d73a8d586 /erts/emulator/beam/erl_alloc.c | |
parent | ab75301714c3183172e3d315437ed2d62d735c4e (diff) | |
parent | f63b0006ea9ef64ea7da7eb023ccaf55cc03597a (diff) | |
download | otp-40790b549f870b61828e7590977faf827abd3a01.tar.gz otp-40790b549f870b61828e7590977faf827abd3a01.tar.bz2 otp-40790b549f870b61828e7590977faf827abd3a01.zip |
Merge branch 'sverker/valgrind-fixing'
* sverker/valgrind-fixing:
erts: valgrind suppressions for prebuilt terms in os_info_init
Fix dlopen-leak of drivers with incorrect version
erts: Add valgrind suppression files
erts: Remove valgrind limit for erts_alloc_permanent_cache_aligned
erts: Fix write-after-free bug in inet driver
ETS: Fix faulty size calculation SIZEOF_EXTSEG
ETS: Fix valgrind PossiblyLost in ETS hash tables
Diffstat (limited to 'erts/emulator/beam/erl_alloc.c')
-rw-r--r-- | erts/emulator/beam/erl_alloc.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c index 33d6cf5f2f..140a84d5fc 100644 --- a/erts/emulator/beam/erl_alloc.c +++ b/erts/emulator/beam/erl_alloc.c @@ -2758,16 +2758,18 @@ erts_allocator_options(void *proc) void *erts_alloc_permanent_cache_aligned(ErtsAlcType_t type, Uint size) { - UWord v = (UWord) erts_alloc(type, size + (ERTS_CACHE_LINE_SIZE-1)); + UWord v = (UWord) erts_alloc(type, size + (ERTS_CACHE_LINE_SIZE-1) +#ifdef VALGRIND + + sizeof(UWord) +#endif + ); #ifdef VALGRIND - { /* Avoid Leak_PossiblyLost */ - static UWord vg_root_set[10]; - static unsigned ix = 0; - if (ix >= sizeof(vg_root_set) / sizeof(*vg_root_set)) { - erl_exit(ERTS_ABORT_EXIT, "Too many erts_alloc_permanent_cache_aligned's\n"); - } - vg_root_set[ix++] = v; /* not thread safe */ + { /* Link them to avoid Leak_PossiblyLost */ + static UWord* first_in_list = NULL; + *(UWord**)v = first_in_list; + first_in_list = (UWord*) v; + v += sizeof(UWord); } #endif |