Fix malloc debug macros to work properly with h323.

The main problem here was that cstdlib was undefining free thereby causing the
proper debug macros to not be used. ast_h323.cxx has been changed to call
ast_free instead to avoid the issue. 

A few other issues were addressed:
- There were a few instances of functions improperly passing ast_free instead
of ast_free_ptr.
- Some clean up was done to avoid the debug macros intentionally being redefined.
(copied below from Kevin's commit, appreciate the help)
- disable astmm.h from doing anything when STANDALONE is defined, which is used
by the tools in the utils/ directory that use parts of Asterisk header files in
hackish ways; also ensure that utils/extconf.c and utils/conf2ael.c are
compiled with STANDALONE defined.

(closes issue #13593)
Reported by: pj



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@181135 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Jeff Peeler
2009-03-11 04:06:44 +00:00
parent be0c75d54a
commit 58cf8b69da
8 changed files with 51 additions and 130 deletions

View File

@@ -188,6 +188,9 @@ refcounter: refcounter.o md5.o hashtab.o utils.o strings.o sha1.o strcompat.o th
refcounter.o: ASTCFLAGS+=-O0 -DSTANDALONE
extconf.o: extconf.c
extconf.o: ASTCFLAGS+=-DSTANDALONE
conf2ael.o: ASTCFLAGS+=-DSTANDALONE
conf2ael: conf2ael.o ast_expr2f.o ast_expr2.o hashtab.o aelbison.o aelparse.o pbx_ael.o pval.o extconf.o strcompat.o

View File

@@ -891,10 +891,10 @@ int ast_channel_trylock(struct ast_channel *chan);
/* from utils.h */
#define ast_free free
#define ast_free_ptr free
#define MALLOC_FAILURE_MSG \
ast_log(LOG_ERROR, "Memory Allocation Failure in function %s at line %d of %s\n", func, lineno, file);
#ifndef __AST_DEBUG_MALLOC
/*!
* \brief A wrapper for malloc()
@@ -928,97 +928,6 @@ int ast_channel_trylock(struct ast_channel *chan);
#define ast_vasprintf(ret, fmt, ap) \
_ast_vasprintf((ret), __FILE__, __LINE__, __PRETTY_FUNCTION__, (fmt), (ap))
#else
/* If astmm is in use, let it handle these. Otherwise, it will report that
all allocations are coming from this header file */
#undef __ast_calloc
#undef calloc
#undef ast_calloc
#define ast_malloc(a) malloc(a)
#define ast_calloc(a,b) calloc(a,b)
#define ast_realloc(a,b) realloc(a,b)
#define ast_strdup(a) strdup(a)
#define ast_strndup(a,b) strndup(a,b)
#define ast_asprintf(a,b,...) asprintf(a,b,__VA_ARGS__)
#define ast_vasprintf(a,b,c) vasprintf(a,b,c)
void * attribute_malloc __ast_malloc(size_t len, const char *file, int lineno, const char *func)
{
void *p;
if (!(p = malloc(len)))
MALLOC_FAILURE_MSG;
return p;
}
void * attribute_malloc __ast_calloc(size_t num, size_t len, const char *file, int lineno, const char *func)
{
void *p;
if (!(p = calloc(num, len)))
MALLOC_FAILURE_MSG;
return p;
}
void * attribute_malloc _ast_calloc(size_t num, size_t len, const char *file, int lineno, const char *func);
void * attribute_malloc _ast_calloc(size_t num, size_t len, const char *file, int lineno, const char *func)
{
void *p;
if (!(p = calloc(num, len)))
MALLOC_FAILURE_MSG;
return p;
}
void * attribute_malloc __ast_realloc(void *p, size_t len, const char *file, int lineno, const char *func)
{
void *newp;
if (!(newp = realloc(p, len)))
MALLOC_FAILURE_MSG;
return newp;
}
char * attribute_malloc __ast_strdup(const char *str, const char *file, int lineno, const char *func)
{
char *newstr = NULL;
if (str) {
if (!(newstr = strdup(str)))
MALLOC_FAILURE_MSG;
}
return newstr;
}
char * attribute_malloc __ast_strndup(const char *str, size_t len, const char *file, int lineno, const char *func)
{
char *newstr = NULL;
if (str) {
if (!(newstr = strndup(str, len)))
MALLOC_FAILURE_MSG;
}
return newstr;
}
void __ast_free(void *ptr, const char *file, int lineno, const char *func)
{
#undef free
free(ptr);
}
#endif /* AST_DEBUG_MALLOC */
static unsigned int __unsigned_int_flags_dummy;
@@ -1044,8 +953,6 @@ struct ast_flags { /* stolen from utils.h */
#ifndef __AST_DEBUG_MALLOC
#define MALLOC_FAILURE_MSG \
ast_log(LOG_ERROR, "Memory Allocation Failure in function %s at line %d of %s\n", func, lineno, file);
/*!
@@ -1239,20 +1146,6 @@ int _ast_vasprintf(char **ret, const char *file, int lineno, const char *func, c
}
)
#else
/* If astmm is in use, let it handle these. Otherwise, it will report that
all allocations are coming from this header file */
#define ast_malloc(a) malloc(a)
#define ast_calloc(a,b) calloc(a,b)
#define ast_realloc(a,b) realloc(a,b)
#define ast_strdup(a) strdup(a)
#define ast_strndup(a,b) strndup(a,b)
#define ast_vasprintf(a,b,c) vasprintf(a,b,c)
#endif /* AST_DEBUG_MALLOC */
#if !defined(ast_strdupa) && defined(__GNUC__)
/*!
\brief duplicate a string in memory from the stack
@@ -6092,7 +5985,7 @@ static int pbx_load_config(const char *config_file)
lastpri = ipri;
if (!ast_opt_dont_warn && !strcmp(realext, "_."))
ast_log(LOG_WARNING, "The use of '_.' for an extension is strongly discouraged and can have unexpected behavior. Please use '_X.' instead at line %d\n", v->lineno);
if (ast_add_extension2(con, 0, realext, ipri, label, cidmatch, appl, strdup(data), ast_free, global_registrar)) {
if (ast_add_extension2(con, 0, realext, ipri, label, cidmatch, appl, strdup(data), ast_free_ptr, global_registrar)) {
ast_log(LOG_WARNING, "Unable to register extension at line %d\n", v->lineno);
}
}