* There were several places in ARI where an external library was mallocing
memory that must always be released with free(). When MALLOC_DEBUG is
enabled, free() is redirected to the MALLOC_DEBUG version. Since the
external library call still uses the normal malloc(), MALLOC_DEBUG
complains that the freed memory block is not registered and will not free
it. These cases must use ast_std_free().
* Changed calls to asprintf() and vasprintf() to the equivalent
ast_asprintf() and ast_vasprintf() versions respectively.
........
Merged revisions 400270 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@400271
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
ast_agi_send(agi->fd, chan, "200 result=%d Gosub failed\n", res);
}
- /* Must use free because the memory was allocated by asprintf(). */
- free(gosub_args);
+ ast_free(gosub_args);
ast_channel_lock(chan);
ast_debug(4, "%s Ending location: %s,%s,%d\n", ast_channel_name(chan),
json_t *ret = NULL;
if (format) {
- int err = vasprintf(&str, format, args);
+ int err = ast_vasprintf(&str, format, args);
if (err > 0) {
ret = json_string(str);
- free(str);
+ ast_free(str);
}
}
return (struct ast_json *)ret;
{
RAII_VAR(struct stasis_caching_topic *, caching_topic, NULL, ao2_cleanup);
struct stasis_subscription *sub;
- RAII_VAR(char *, new_name, NULL, free);
+ RAII_VAR(char *, new_name, NULL, ast_free);
int ret;
- ret = asprintf(&new_name, "%s-cached", stasis_topic_name(original_topic));
+ ret = ast_asprintf(&new_name, "%s-cached", stasis_topic_name(original_topic));
if (ret < 0) {
return NULL;
}
}
pthread_mutex_destroy(&lock_info->lock);
- if (lock_info->thread_name)
- free((void *) lock_info->thread_name);
- free(lock_info);
+ if (lock_info->thread_name) {
+ ast_free((void *) lock_info->thread_name);
+ }
+ ast_free(lock_info);
}
/*!
static int safe_mkdir(const char *base_path, char *path, int mode)
{
- RAII_VAR(char *, absolute_path, NULL, free);
+ RAII_VAR(char *, absolute_path, NULL, ast_std_free);
absolute_path = realpath(path, NULL);
int res;
while (path_term) {
- RAII_VAR(char *, absolute_subpath, NULL, free);
+ RAII_VAR(char *, absolute_subpath, NULL, ast_std_free);
/* Truncate the path one past the slash */
char c = *(path_term + 1);
int ast_safe_mkdir(const char *base_path, const char *path, int mode)
{
- RAII_VAR(char *, absolute_base_path, NULL, free);
+ RAII_VAR(char *, absolute_base_path, NULL, ast_std_free);
RAII_VAR(char *, p, NULL, ast_free);
if (base_path == NULL || path == NULL) {
struct ast_ari_response *response)
{
RAII_VAR(struct ast_str *, absolute_path_builder, NULL, ast_free);
- RAII_VAR(char *, absolute_api_dirname, NULL, free);
- RAII_VAR(char *, absolute_filename, NULL, free);
+ RAII_VAR(char *, absolute_api_dirname, NULL, ast_std_free);
+ RAII_VAR(char *, absolute_filename, NULL, ast_std_free);
struct ast_json *obj = NULL;
struct ast_variable *host = NULL;
struct ast_json_error error = {};
{
RAII_VAR(char *, relative_dir, NULL, ast_free);
RAII_VAR(char *, absolute_dir, NULL, ast_free);
- RAII_VAR(char *, real_dir, NULL, free);
+ RAII_VAR(char *, real_dir, NULL, ast_std_free);
char *last_slash;
const char *file_portion;
return -1;
}
+#if defined(__AST_DEBUG_MALLOC)
*dir = ast_strdup(real_dir); /* Dupe so we can ast_free() */
+#else
+ /*
+ * ast_std_free() and ast_free() are the same thing at this time
+ * so we don't need to dupe.
+ */
+ *dir = real_dir;
+ real_dir = NULL;
+#endif /* defined(__AST_DEBUG_MALLOC) */
*file = ast_strdup(file_portion);
return 0;
}