diff options
-rw-r--r-- | include/asterisk/http.h | 6 | ||||
-rw-r--r-- | main/http.c | 6 | ||||
-rw-r--r-- | res/res_http_post.c | 9 |
3 files changed, 17 insertions, 4 deletions
diff --git a/include/asterisk/http.h b/include/asterisk/http.h index 1f46b1eed..218ac3f1a 100644 --- a/include/asterisk/http.h +++ b/include/asterisk/http.h @@ -87,9 +87,13 @@ struct ast_http_uri { unsigned int supports_get:1; /*! This handler accepts POST requests */ unsigned int supports_post:1; + /*! Structure is malloc'd */ + unsigned int mallocd:1; + /*! Data structure is malloc'd */ + unsigned int dmallocd:1; /*! Data to bind to the uri if needed */ void *data; - /*! Key to be used for unlinking if multipile URIs registerd */ + /*! Key to be used for unlinking if multiple URIs registered */ const char *key; }; diff --git a/main/http.c b/main/http.c index bb6ae6121..d08b17fa4 100644 --- a/main/http.c +++ b/main/http.c @@ -389,6 +389,12 @@ void ast_http_uri_unlink_all_with_key(const char *key) if (!strcmp(urih->key, key)) { AST_RWLIST_REMOVE_CURRENT(entry); } + if (urih->dmallocd) { + ast_free(urih->data); + } + if (urih->mallocd) { + ast_free(urih); + } } AST_RWLIST_TRAVERSE_SAFE_END AST_RWLIST_UNLOCK(&uris); diff --git a/res/res_http_post.c b/res/res_http_post.c index f1ae7a7da..2e4a20a1d 100644 --- a/res/res_http_post.c +++ b/res/res_http_post.c @@ -289,12 +289,15 @@ static int __ast_http_post_load(int reload) struct ast_str *ds; if (!(urih = ast_calloc(sizeof(*urih), 1))) { + ast_config_destroy(cfg); return -1; } - if (!(ds = ast_str_create(32))) + if (!(ds = ast_str_create(32))) { + ast_free(urih); + ast_config_destroy(cfg); return -1; - + } urih->description = ast_strdup("HTTP POST mapping"); urih->uri = ast_strdup(v->name); @@ -305,6 +308,7 @@ static int __ast_http_post_load(int reload) urih->supports_post = 1; urih->callback = http_post_callback; urih->key = __FILE__; + urih->mallocd = urih->dmallocd = 1; ast_http_uri_link(urih); } @@ -323,7 +327,6 @@ static int unload_module(void) static int reload(void) { - __ast_http_post_load(1); return AST_MODULE_LOAD_SUCCESS; |