Author: mmichelson
Date: Fri Jan 30 10:47:50 2015
New Revision: 431468

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=431468
Log:
Fix some memory leaks.

These memory leaks were found and fixed by John Hardin. I'm just
committing them for him.

ASTERISK-24736 #close
Reported by Mark Michelson

Review: https://reviewboard.asterisk.org/r/4389


Modified:
    branches/13/channels/chan_pjsip.c
    branches/13/main/bridge_after.c
    branches/13/main/manager.c
    branches/13/main/pbx.c
    branches/13/main/stasis_channels.c
    branches/13/main/xmldoc.c
    branches/13/pbx/pbx_spool.c
    branches/13/res/res_pjsip_refer.c

Modified: branches/13/channels/chan_pjsip.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/channels/chan_pjsip.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/channels/chan_pjsip.c (original)
+++ branches/13/channels/chan_pjsip.c Fri Jan 30 10:47:50 2015
@@ -2058,7 +2058,7 @@
 
 static int call_pickup_incoming_request(struct ast_sip_session *session, 
pjsip_rx_data *rdata)
 {
-       struct ast_features_pickup_config *pickup_cfg = 
ast_get_chan_features_pickup_config(session->channel);
+       struct ast_features_pickup_config *pickup_cfg;
        struct ast_channel *chan;
 
        /* We don't care about reinvites */
@@ -2066,6 +2066,7 @@
                return 0;
        }
 
+       pickup_cfg = ast_get_chan_features_pickup_config(session->channel);
        if (!pickup_cfg) {
                ast_log(LOG_ERROR, "Unable to retrieve pickup configuration 
options. Unable to detect call pickup extension.\n");
                return 0;

Modified: branches/13/main/bridge_after.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/main/bridge_after.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/main/bridge_after.c (original)
+++ branches/13/main/bridge_after.c Fri Jan 30 10:47:50 2015
@@ -345,6 +345,7 @@
        ast_free((char *) after_bridge->parseable_goto);
        ast_free((char *) after_bridge->context);
        ast_free((char *) after_bridge->exten);
+       ast_free((char *) after_bridge);
 }
 
 /*!

Modified: branches/13/main/manager.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/main/manager.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/main/manager.c (original)
+++ branches/13/main/manager.c Fri Jan 30 10:47:50 2015
@@ -4952,8 +4952,6 @@
                        S_OR(in->cid_name, NULL),
                        in->vars, in->account, &chan, in->early_media, 
&assignedids);
        }
-       /* Any vars memory was passed to the ast_pbx_outgoing_xxx() calls. */
-       in->vars = NULL;
 
        if (!chan) {
                snprintf(requested_channel, AST_CHANNEL_NAME, "%s/%s", 
in->tech, in->data);
@@ -5400,11 +5398,11 @@
                }
        } else if (!ast_strlen_zero(app)) {
                res = ast_pbx_outgoing_app(tech, cap, data, to, app, appdata, 
&reason, 1, l, n, vars, account, NULL, assignedids.uniqueid ? &assignedids : 
NULL);
-               /* Any vars memory was passed to ast_pbx_outgoing_app(). */
+               ast_variables_destroy(vars);
        } else {
                if (exten && context && pi) {
                        res = ast_pbx_outgoing_exten(tech, cap, data, to, 
context, exten, pi, &reason, 1, l, n, vars, account, NULL, bridge_early, 
assignedids.uniqueid ? &assignedids : NULL);
-                       /* Any vars memory was passed to 
ast_pbx_outgoing_exten(). */
+                       ast_variables_destroy(vars);
                } else {
                        astman_send_error(s, m, "Originate with 'Exten' 
requires 'Context' and 'Priority'");
                        ast_variables_destroy(vars);

Modified: branches/13/main/pbx.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/main/pbx.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/main/pbx.c (original)
+++ branches/13/main/pbx.c Fri Jan 30 10:47:50 2015
@@ -8827,7 +8827,7 @@
                                dupdstr = ast_strdup(prio_item->data);
 
                                res1 = ast_add_extension2(new, 0, 
prio_item->exten, prio_item->priority, prio_item->label,
-                                                                               
  prio_item->matchcid ? prio_item->cidmatch : NULL, prio_item->app, dupdstr, 
prio_item->datad, prio_item->registrar);
+                                                                               
  prio_item->matchcid ? prio_item->cidmatch : NULL, prio_item->app, dupdstr, 
ast_free_ptr, prio_item->registrar);
                                if (!res1 && new_exten_item && new_prio_item){
                                        ast_verb(3,"Dropping old dialplan item 
%s/%s/%d [%s(%s)] (registrar=%s) due to conflict with new dialplan\n",
                                                        context->name, 
prio_item->exten, prio_item->priority, prio_item->app, (char*)prio_item->data, 
prio_item->registrar);

Modified: branches/13/main/stasis_channels.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/main/stasis_channels.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/main/stasis_channels.c (original)
+++ branches/13/main/stasis_channels.c Fri Jan 30 10:47:50 2015
@@ -1004,13 +1004,14 @@
        const char *direction =
                ast_json_string_get(ast_json_object_get(blob, "direction"));
        const struct timeval *tv = stasis_message_timestamp(message);
-       struct ast_json *json_channel = ast_channel_snapshot_to_json(snapshot, 
sanitize);
+       struct ast_json *json_channel;
 
        /* Only present received DTMF end events as JSON */
        if (strcasecmp("Received", direction) != 0) {
                return NULL;
        }
 
+       json_channel = ast_channel_snapshot_to_json(snapshot, sanitize);
        if (!json_channel) {
                return NULL;
        }

Modified: branches/13/main/xmldoc.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/main/xmldoc.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/main/xmldoc.c (original)
+++ branches/13/main/xmldoc.c Fri Jan 30 10:47:50 2015
@@ -2533,7 +2533,8 @@
        /* Iterate over managerEvent nodes */
        for (event = ast_xml_node_get_children(list_elements); event; event = 
ast_xml_node_get_next(event)) {
                struct ast_xml_node *event_instance;
-               const char *name = ast_xml_get_attribute(event, "name");
+               RAII_VAR(const char *, name, ast_xml_get_attribute(event, 
"name"),
+                       ast_xml_free_attr);
                struct ast_xml_doc_item *new_item;
 
                if (!name || strcmp(ast_xml_node_get_name(event), 
"managerEvent")) {
@@ -2607,10 +2608,16 @@
                "managerEventInstance", NULL, NULL);
        if (!event_instance) {
                return NULL;
-       }
-
-       return xmldoc_build_documentation_item(event_instance,
-               ast_xml_get_attribute(final_response_event, "name"), 
"managerEvent");
+       } else {
+               const char *name;
+               struct ast_xml_doc_item *res;
+
+               name = ast_xml_get_attribute(final_response_event, "name");
+               res = xmldoc_build_documentation_item(event_instance, name, 
"managerEvent");
+               ast_xml_free_attr(name);
+               return res;
+       }
+
 }
 
 struct ast_xml_doc_item *ast_xmldoc_build_final_response(const char *type, 
const char *name, const char *module)

Modified: branches/13/pbx/pbx_spool.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/pbx/pbx_spool.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/pbx/pbx_spool.c (original)
+++ branches/13/pbx/pbx_spool.c Fri Jan 30 10:47:50 2015
@@ -377,14 +377,12 @@
                res = ast_pbx_outgoing_app(o->tech, o->capabilities, o->dest, 
o->waittime * 1000,
                        o->app, o->data, &reason, 2 /* wait to finish */, 
o->cid_num, o->cid_name,
                        o->vars, o->account, NULL, NULL);
-               o->vars = NULL;
        } else {
                ast_verb(3, "Attempting call on %s/%s for %s@%s:%d (Retry 
%d)\n", o->tech, o->dest, o->exten, o->context,o->priority, o->retries);
                res = ast_pbx_outgoing_exten(o->tech, o->capabilities, o->dest,
                        o->waittime * 1000, o->context, o->exten, o->priority, 
&reason,
                        2 /* wait to finish */, o->cid_num, o->cid_name, 
o->vars, o->account, NULL,
                        ast_test_flag(&o->options, SPOOL_FLAG_EARLY_MEDIA), 
NULL);
-               o->vars = NULL;
        }
        if (res) {
                ast_log(LOG_NOTICE, "Call failed to go through, reason (%d) 
%s\n", reason, ast_channel_reason2str(reason));

Modified: branches/13/res/res_pjsip_refer.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/13/res/res_pjsip_refer.c?view=diff&rev=431468&r1=431467&r2=431468
==============================================================================
--- branches/13/res/res_pjsip_refer.c (original)
+++ branches/13/res/res_pjsip_refer.c Fri Jan 30 10:47:50 2015
@@ -242,15 +242,15 @@
 
        /* If a notification is due to be sent push it to the thread pool */
        if (notification) {
-               if (ast_sip_push_task(progress->serializer, 
refer_progress_notify, notification)) {
-                       ao2_cleanup(notification);
-               }
-
                /* If the subscription is being terminated we don't need the 
frame hook any longer */
                if (notification->state == PJSIP_EVSUB_STATE_TERMINATED) {
                        ast_debug(3, "Detaching REFER progress monitoring hook 
from '%s' as subscription is being terminated\n",
                                ast_channel_name(chan));
                        ast_framehook_detach(chan, progress->framehook);
+               }
+
+               if (ast_sip_push_task(progress->serializer, 
refer_progress_notify, notification)) {
+                       ao2_cleanup(notification);
                }
        }
 
@@ -420,6 +420,7 @@
        ao2_cleanup(attended->transferer);
        ast_channel_unref(attended->transferer_chan);
        ao2_cleanup(attended->transferer_second);
+       ao2_cleanup(attended->progress);
 }
 
 /*! \brief Allocator for attended transfer task */


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to