<p>Richard Mudgett has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/9273">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">VECTOR: Passing parameters with side effects to macros is dangerous.<br><br>* Fix several instances where we were bumping a ref in the parameter and<br>then unrefing the object if it failed. The way the AST_VECTOR_APPEND()<br>and AST_VECTOR_REPLACE() macros are implemented means if it fails the new<br>value was never evaluated.<br><br>Change-Id: I2847872a455b11ea7e5b7ce697c0a455a1d0ac9a<br>---<br>M res/res_pjsip/pjsip_options.c<br>M res/res_pjsip_history.c<br>M res/stasis/messaging.c<br>3 files changed, 8 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/73/9273/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c<br>index 2229664..891de89 100644<br>--- a/res/res_pjsip/pjsip_options.c<br>+++ b/res/res_pjsip/pjsip_options.c<br>@@ -1530,10 +1530,11 @@<br> ast_debug(3, "Adding endpoint compositor '%s' to AOR '%s'\n",<br> task_data->endpoint_state_compositor->name, task_data->aor_options->name);<br> <br>+ ao2_ref(task_data->endpoint_state_compositor, +1);<br> if (AST_VECTOR_APPEND(&task_data->aor_options->compositors,<br>- ao2_bump(task_data->endpoint_state_compositor))) {<br>+ task_data->endpoint_state_compositor)) {<br> /* Failed to add so no need to update the endpoint status. Nothing changed. */<br>- ao2_cleanup(task_data->endpoint_state_compositor);<br>+ ao2_ref(task_data->endpoint_state_compositor, -1);<br> return 0;<br> }<br> <br>diff --git a/res/res_pjsip_history.c b/res/res_pjsip_history.c<br>index 8f44d39..e6e9ac2 100644<br>--- a/res/res_pjsip_history.c<br>+++ b/res/res_pjsip_history.c<br>@@ -1135,7 +1135,8 @@<br> } else if (!res) {<br> continue;<br> } else {<br>- if (AST_VECTOR_APPEND(output, ao2_bump(entry))) {<br>+ ao2_bump(entry);<br>+ if (AST_VECTOR_APPEND(output, entry)) {<br> ao2_cleanup(entry);<br> }<br> }<br>diff --git a/res/stasis/messaging.c b/res/stasis/messaging.c<br>index 979b687..4a86d58 100644<br>--- a/res/stasis/messaging.c<br>+++ b/res/stasis/messaging.c<br>@@ -459,8 +459,9 @@<br> ao2_link(endpoint_subscriptions, sub);<br> } else {<br> ast_rwlock_wrlock(&tech_subscriptions_lock);<br>- if (AST_VECTOR_APPEND(&tech_subscriptions, ao2_bump(sub))) {<br>- /* Release the ao2_bump that was for the vector and allocation references. */<br>+ ao2_ref(sub, +1);<br>+ if (AST_VECTOR_APPEND(&tech_subscriptions, sub)) {<br>+ /* Release the refs that were for the vector and the allocation. */<br> ao2_ref(sub, -2);<br> sub = NULL;<br> }<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/9273">change 9273</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/9273"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I2847872a455b11ea7e5b7ce697c0a455a1d0ac9a </div>
<div style="display:none"> Gerrit-Change-Number: 9273 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Mudgett <rmudgett@digium.com> </div>