Merge "MALLOC_DEBUG: Replace WRAP_LIBC_MALLOC with ASTMM_LIBC."

This commit is contained in:
Joshua Colp 2015-05-14 10:57:04 -05:00 committed by Gerrit Code Review
commit e092a89694
16 changed files with 98 additions and 44 deletions

View File

@ -34,7 +34,7 @@ Some OSS fixes and a few lpc changes to make it actually work
-lf2c -lm (in that order)
*/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#include "f2c.h"

View File

@ -7,8 +7,8 @@ if [ -f addons/mp3/mpg123.h ]; then
echo "***"
# Manually patch interface.c if not done yet.
if ! grep -q WRAP_LIBC_MALLOC addons/mp3/interface.c; then
sed -i -e '/#include "asterisk.h"/i#define WRAP_LIBC_MALLOC' \
if ! grep -q ASTMM_LIBC addons/mp3/interface.c; then
sed -i -e '/#include "asterisk.h"/i#define ASTMM_LIBC ASTMM_REDIRECT' \
addons/mp3/interface.c
fi
@ -18,8 +18,8 @@ fi
svn export http://svn.digium.com/svn/thirdparty/mp3/trunk addons/mp3 $@
# Manually patch interface.c if not done yet.
if ! grep -q WRAP_LIBC_MALLOC addons/mp3/interface.c; then
sed -i -e '/#include "asterisk.h"/i#define WRAP_LIBC_MALLOC' \
if ! grep -q ASTMM_LIBC addons/mp3/interface.c; then
sed -i -e '/#include "asterisk.h"/i#define ASTMM_LIBC ASTMM_REDIRECT' \
addons/mp3/interface.c
fi

View File

@ -44,16 +44,6 @@ extern "C" {
#include <stdio.h>
#include <stdarg.h>
/* Undefine any macros */
#undef malloc
#undef calloc
#undef realloc
#undef strdup
#undef strndup
#undef asprintf
#undef vasprintf
#undef free
void *ast_std_malloc(size_t size);
void *ast_std_calloc(size_t nmemb, size_t size);
void *ast_std_realloc(void *ptr, size_t size);
@ -74,9 +64,72 @@ int __ast_vasprintf(char **strp, const char *format, va_list ap, const char *fil
void __ast_mm_init_phase_1(void);
void __ast_mm_init_phase_2(void);
/* Redefine libc malloc to our own versions */
/*!
* \brief ASTMM_LIBC can be defined to control the meaning of standard allocators.
*
* \note The standard allocators effected by this compiler define are:
* malloc, calloc, realloc, strdup, strndup, asprintf, vasprintf and free.
*
* @{
*/
#ifdef WRAP_LIBC_MALLOC
/*!
* \brief Produce compiler errors if standard allocators are used.
*
* \note This is the default option, and in most cases the correct option.
* Any use of standard allocators will cause an error, even if those uses
* are in unused static inline header functions.
*/
#define ASTMM_BLOCK 0
/*!
* \brief Redirect standard allocators to use Asterisk functions.
*
* \note This option is used in some cases instead of changing the
* existing source to use Asterisk functions. New code should
* generally avoid this option, except where it's needed to work
* with situations where switching the code is unreasonable, such
* as output from code generators that are hard coded to use
* standard functions.
*/
#define ASTMM_REDIRECT 1
/*!
* \brief Standard allocators are used directly.
*
* \note This option is needed when including 3rd party headers with calls
* to standard allocators from inline functions. Using ASTMM_REDIRECT in
* this situation could result in an object being allocated by malloc and
* freed by ast_free, or the reverse.
*/
#define ASTMM_IGNORE 2
/*!
* }@
*/
#if !defined(ASTMM_LIBC)
/* BLOCK libc allocators by default. */
#define ASTMM_LIBC ASTMM_BLOCK
#endif
#if ASTMM_LIBC == ASTMM_IGNORE
/* Don't touch the libc functions. */
#else
/* Undefine any macros */
#undef malloc
#undef calloc
#undef realloc
#undef strdup
#undef strndup
#undef asprintf
#undef vasprintf
#undef free
#if ASTMM_LIBC == ASTMM_REDIRECT
/* Redefine libc functions to our own versions */
#define calloc(a,b) \
__ast_calloc(a,b,__FILE__, __LINE__, __PRETTY_FUNCTION__)
#define malloc(a) \
@ -93,7 +146,10 @@ void __ast_mm_init_phase_2(void);
__ast_asprintf(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, b, c)
#define vasprintf(a,b,c) \
__ast_vasprintf(a,b,c,__FILE__, __LINE__, __PRETTY_FUNCTION__)
#else
#elif ASTMM_LIBC == ASTMM_BLOCK
/* Redefine libc functions to cause compile errors */
#define calloc(a,b) \
Do_not_use_calloc__use_ast_calloc->fail(a,b)
#define malloc(a) \
@ -110,6 +166,11 @@ void __ast_mm_init_phase_2(void);
Do_not_use_asprintf__use_ast_asprintf->fail(a,b,c)
#define vasprintf(a,b,c) \
Do_not_use_vasprintf__use_ast_vasprintf->fail(a,b,c)
#else
#error "Unacceptable value for the macro ASTMM_LIBC"
#endif
#endif
/* Provide our own definitions */

View File

@ -91,7 +91,7 @@
* $FreeBSD: src/bin/expr/expr.y,v 1.16 2000/07/22 10:59:36 se Exp $
*/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#include <sys/types.h>

View File

@ -12,7 +12,7 @@
* $FreeBSD: src/bin/expr/expr.y,v 1.16 2000/07/22 10:59:36 se Exp $
*/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#include <sys/types.h>

View File

@ -1,4 +1,4 @@
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#line 2 "ast_expr2f.c"

View File

@ -28,6 +28,7 @@
<support_level>core</support_level>
***/
#define ASTMM_LIBC ASTMM_IGNORE
#include "asterisk.h"
#if defined(__AST_DEBUG_MALLOC)
@ -61,16 +62,6 @@ enum func_type {
FUNC_ASPRINTF
};
/* Undefine all our macros */
#undef malloc
#undef calloc
#undef realloc
#undef strdup
#undef strndup
#undef free
#undef vasprintf
#undef asprintf
#define FENCE_MAGIC 0xfeedbabe /*!< Allocated memory high/low fence overwrite check. */
#define FREED_MAGIC 0xdeaddead /*!< Freed memory wipe filler. */
#define MALLOC_FILLER 0x55 /*!< Malloced memory filler. Must not be zero. */

View File

@ -26,7 +26,7 @@
<support_level>core</support_level>
***/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()

View File

@ -68,7 +68,7 @@
%option bison-locations
%{
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()

View File

@ -99,7 +99,7 @@
*
*/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()

View File

@ -22,7 +22,7 @@
*
*/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()

View File

@ -1,4 +1,4 @@
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#line 2 "ael_lex.c"

View File

@ -27,7 +27,7 @@
<support_level>extended</support_level>
***/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()

View File

@ -48,12 +48,8 @@
<support_level>extended</support_level>
***/
/* Include spandsp headers before asterisk.h so the inline functions can continue using
* malloc and free, even with MALLOC_DEBUG enabled. */
#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES
#include <spandsp.h>
#include <spandsp/version.h>
/* Needed for spandsp headers */
#define ASTMM_LIBC ASTMM_IGNORE
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
@ -69,6 +65,10 @@ ASTERISK_REGISTER_FILE()
#include "asterisk/channel.h"
#include "asterisk/format_cache.h"
#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES
#include <spandsp.h>
#include <spandsp/version.h>
#define SPANDSP_FAX_SAMPLES 160
#define SPANDSP_FAX_TIMER_RATE 8000 / SPANDSP_FAX_SAMPLES /* 50 ticks per second, 20ms, 160 samples per second */
#define SPANDSP_ENGAGE_UDPTL_NAT_RETRY 3

View File

@ -18,6 +18,8 @@
<support_level>extended</support_level>
***/
/* Needed for net-snmp headers */
#define ASTMM_LIBC ASTMM_IGNORE
#include "asterisk.h"
ASTERISK_REGISTER_FILE()

View File

@ -43,7 +43,7 @@
<support_level>extended</support_level>
***/
#define WRAP_LIBC_MALLOC
#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#undef DEBUG_THREADS