diff options
author | Andres Freund <andres@anarazel.de> | 2017-02-27 03:41:44 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2017-02-27 03:41:44 -0800 |
commit | bfd12cccbd72c1846bfa3e4031155c9bd479d70a (patch) | |
tree | 39550de06e9645074bd8288d4033b8d450bef922 /src/include/utils/memdebug.h | |
parent | 1513dbea7f89053476a5e95e2f2e952135a5b34c (diff) | |
download | postgresql-bfd12cccbd72c1846bfa3e4031155c9bd479d70a.tar.gz postgresql-bfd12cccbd72c1846bfa3e4031155c9bd479d70a.zip |
Make useful infrastructure from aset.c generally available.
An upcoming patch introduces a new type of memory context. To avoid
duplicating debugging infrastructure within aset.c, move useful pieces
to memdebug.[ch].
While touching aset.c, fix printf format code in AllocFree* debug
macros.
Author: Tomas Vondra
Reviewed-By: Andres Freund
Discussion: https://postgr.es/m/b3b2245c-b37a-e1e5-ebc4-857c914bc747@2ndquadrant.com
Diffstat (limited to 'src/include/utils/memdebug.h')
-rw-r--r-- | src/include/utils/memdebug.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/include/utils/memdebug.h b/src/include/utils/memdebug.h index 90eb926ddf4..206e6ce0028 100644 --- a/src/include/utils/memdebug.h +++ b/src/include/utils/memdebug.h @@ -31,4 +31,52 @@ #define VALGRIND_MEMPOOL_CHANGE(context, optr, nptr, size) do {} while (0) #endif + +#ifdef CLOBBER_FREED_MEMORY + +/* Wipe freed memory for debugging purposes */ +static inline void +wipe_mem(void *ptr, size_t size) +{ + VALGRIND_MAKE_MEM_UNDEFINED(ptr, size); + memset(ptr, 0x7F, size); + VALGRIND_MAKE_MEM_NOACCESS(ptr, size); +} + +#endif /* CLOBBER_FREED_MEMORY */ + +#ifdef MEMORY_CONTEXT_CHECKING + +static inline void +set_sentinel(void *base, Size offset) +{ + char *ptr = (char *) base + offset; + + VALGRIND_MAKE_MEM_UNDEFINED(ptr, 1); + *ptr = 0x7E; + VALGRIND_MAKE_MEM_NOACCESS(ptr, 1); +} + +static inline bool +sentinel_ok(const void *base, Size offset) +{ + const char *ptr = (const char *) base + offset; + bool ret; + + VALGRIND_MAKE_MEM_DEFINED(ptr, 1); + ret = *ptr == 0x7E; + VALGRIND_MAKE_MEM_NOACCESS(ptr, 1); + + return ret; +} + +#endif /* MEMORY_CONTEXT_CHECKING */ + +#ifdef RANDOMIZE_ALLOCATED_MEMORY + +void randomize_mem(char *ptr, size_t size); + +#endif /* RANDOMIZE_ALLOCATED_MEMORY */ + + #endif /* MEMDEBUG_H */ |