<p>Patch set 2:<span style="border-radius: 3px; display: inline-block; margin: 0 2px; padding: 4px;background-color: #ffd4d4; color: #000000;">Code-Review -1</span></p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/14688">View Change</a></p><p>6 comments:</p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0;"><p><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/apps/app_dial.c">File apps/app_dial.c:</a></p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/apps/app_dial.c@1422">Patch Set #2, Line 1422:</a> <code style="font-family:monospace,monospace">                                               if (f->data.ptr != NULL && f->datalen == sizeof(struct ast_stream_topology *)) {</code></p><p style="white-space: pre-wrap; word-wrap: break-word;">There needs to be a better, more specific/deterministic way to distinguish the type of contained data.</p></li></ul></li><li style="margin: 0; padding: 0;"><p><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/include/asterisk/channel.h">File include/asterisk/channel.h:</a></p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/include/asterisk/channel.h@712">Patch Set #2, Line 712:</a> <code style="font-family:monospace,monospace">     * \since 18</code></p><p style="white-space: pre-wrap; word-wrap: break-word;">Make this 18.0.0</p></li></ul></li><li style="margin: 0; padding: 0;"><p><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/main/channel.c">File main/channel.c:</a></p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/main/channel.c@1254">Patch Set #2, Line 1254:</a> </p><p><blockquote style="border-left: 1px solid #aaa; margin: 10px 0; padding: 0 10px;"><pre style="font-family: monospace,monospace; white-space: pre-wrap;">         .data.ptr = (void *) &topology,<br>           .datalen = sizeof(topology)<br></pre></blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">I don't think we can rely on the caller to hold onto the topologies ref and pointer while it's passed through the core. It should be bumped here before sending.</p></li></ul></li><li style="margin: 0; padding: 0;"><p><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/main/frame.c">File main/frame.c:</a></p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/main/frame.c@143">Patch Set #2, Line 143:</a> <code style="font-family:monospace,monospace">                           && fr->datalen == sizeof(struct ast_stream_topology *)) {</code></p><p style="white-space: pre-wrap; word-wrap: break-word;">Same as in dial. A more robust way needs to be utilized in determining the type.</p></li><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/main/frame.c@144">Patch Set #2, Line 144:</a> <code style="font-family:monospace,monospace">                                struct ast_stream_topology *topology = *((struct ast_stream_topology **)fr->data.ptr);</code></p><p><blockquote style="border-left: 1px solid #aaa; margin: 10px 0; padding: 0 10px;">I'll let others chime in but it feels kludgey to use the data.ptr for this. […]</blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">I agree with Josh here.</p></li><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/14688/2/main/frame.c@222">Patch Set #2, Line 222:</a> </p><p><blockquote style="border-left: 1px solid #aaa; margin: 10px 0; padding: 0 10px;"><pre style="font-family: monospace,monospace; white-space: pre-wrap;">  if (fr->frametype == AST_FRAME_CONTROL && fr->subclass.integer == AST_CONTROL_ANSWER<br>            && fr->datalen == sizeof(struct ast_stream_topology *)) {<br>          struct ast_stream_topology *topology = *((struct ast_stream_topology **)fr->data.ptr);<br>             ao2_bump(topology);<br>   }<br></pre></blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">I think if we're going to add the ability to pass ao2 objects through the framing core maybe  a more generic approach could be done. For instance when a frame is queued with data maybe a "cleanup" routine is also passed in that executes when the frame is done with it.</p></li></ul></li></ul><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/14688">change 14688</a>. To unsubscribe, or for help writing mail filters, 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/c/asterisk/+/14688"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I0115d2ed68d6bae0f87e85abcf16c771bdaf992c </div>
<div style="display:none"> Gerrit-Change-Number: 14688 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Friendly Automation </div>
<div style="display:none"> Gerrit-Reviewer: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-Reviewer: Kevin Harwell <kharwell@digium.com> </div>
<div style="display:none"> Gerrit-Comment-Date: Tue, 28 Jul 2020 18:39:42 +0000 </div>
<div style="display:none"> Gerrit-HasComments: Yes </div>
<div style="display:none"> Gerrit-Has-Labels: Yes </div>
<div style="display:none"> Comment-In-Reply-To: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-MessageType: comment </div>