diff options
author | Sverker Eriksson <[email protected]> | 2011-09-28 18:34:43 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2011-09-28 18:34:43 +0200 |
commit | b75eb2e04df5ccce6f9e62c67fbf8d8a9ac8f425 (patch) | |
tree | 0e39af020cb904ccb78ec943bbb89276b4100360 /erts/emulator/beam/erl_alloc.c | |
parent | 909cc850f3bd3da0e996d500ec1c27d08ad8de1a (diff) | |
download | otp-b75eb2e04df5ccce6f9e62c67fbf8d8a9ac8f425.tar.gz otp-b75eb2e04df5ccce6f9e62c67fbf8d8a9ac8f425.tar.bz2 otp-b75eb2e04df5ccce6f9e62c67fbf8d8a9ac8f425.zip |
Prevent valgrind warning for erts_alloc_permanent_cache_aligned
Diffstat (limited to 'erts/emulator/beam/erl_alloc.c')
-rw-r--r-- | erts/emulator/beam/erl_alloc.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c index bbc8a445a7..9af80dd7a9 100644 --- a/erts/emulator/beam/erl_alloc.c +++ b/erts/emulator/beam/erl_alloc.c @@ -2960,6 +2960,29 @@ erts_allocator_options(void *proc) return res; } +void *erts_alloc_permanent_cache_aligned(ErtsAlcType_t type, Uint size) +{ + UWord v = (UWord) erts_alloc(type, size + (ERTS_CACHE_LINE_SIZE-1)); + +#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 */ + } +#endif + + if (v & ERTS_CACHE_LINE_MASK) { + v = (v & ~ERTS_CACHE_LINE_MASK) + ERTS_CACHE_LINE_SIZE; + } + ASSERT((v & ERTS_CACHE_LINE_MASK) == 0); + return (void*)v; +} + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\ * Deprecated functions * * * @@ -3583,6 +3606,4 @@ install_debug_functions(void) return FENCE_SZ; } - - #endif /* #ifdef DEBUG */ |